mybatis关联查询一对多
一、实体类(getset方法,toString,构造方法忽略)
public class Dept {
private Integer deptid;
private String dname;
private String dloc;
private Set<Emp> emps= new HashSet<>();
}
public class Emp {
private Integer empid;
private String ename;
private String esex;
private Date ehiredate;
private Double esal;
private Dept dept;
}
二、接口方法,以下用了两种方法(推荐第一种)
public interface DeptMapper {
public List<Dept> selectAllDept();
public List<Dept> selectAllDept2();
}
三、xml文件
DeptMapper.xml
<mapper namespace="com.gx.mapper.DeptMapper">
<!-- 根据部门编号查询部门信息-->
<select id="selectDeptById" resultType="Dept">
select * from dept where deptid=#{deptid}
</select>
<resultMap type="Dept" id="BaseDeptCloumn">
<id property="deptid" column="deptid"/>
<result property="dname" column="dname"/>
<result property="dloc" column="dloc"/>
</resultMap>
<resultMap type="Dept" id="MyDeptMap" extends="BaseDeptCloumn">
<collection property="emps" javaType="Emp">
<id property="empid" column="empid" />
<result property="ename" column="ename"/>
<result property="esex" column="esex"/>
<result property="ehiredate" column="ehiredate"/>
<result property="esal" column="esal"/>
</collection>
</resultMap>
<!-- 查询所有部门 1-->
<select id="selectAllDept" resultMap="MyDeptMap">
select * from dept inner join emp using(deptid)
</select>
<resultMap type="Dept" id="MyDeptMap2" extends="BaseDeptCloumn">
<!--
property="emps" 代表dept实体里面的emps属性
ofType="Emp" emps集合里面存在的数据类型
column="deptid" 传到com.gx.mapper.EmpMapper.selectEmpByDeptId去的参数
select 调用的其他的接口
-->
<collection property="emps" ofType="Emp" column="deptid"
select="com.gx.mapper.EmpMapper.selectEmpByDeptId">
</collection>
</resultMap>
<!-- 查询所有部门2 -->
<select id="selectAllDept2" resultMap="MyDeptMap2">
select * from dept
</select>
</mapper>
EmpMapper.xml
<mapper namespace="com.gx.mapper.EmpMapper">
<!-- 根据部门id查询员工的信息 -->
<select id="selectEmpByDeptId" resultType="Emp">
select * from emp where deptid=#{deptid}
</select>
</mapper>
测试
public class myTest {
SqlSession session = MyBatisUtils.openSession();
DeptMapper deptMapper = session.getMapper(DeptMapper.class);
@Test
public void selectAllDept() {
List<Dept> list = deptMapper.selectAllDept();
for (Dept dept : list) {
System.out.println(dept);
}
MyBatisUtils.closeSession(session);
}
@Test
public void selectAllDept2() {
List<Dept> list = deptMapper.selectAllDept2();
for (Dept dept : list) {
System.out.println(dept);
}
MyBatisUtils.closeSession(session);
}
}
提示:第二种方法根据部门表的id数量(n),就会执行n条查询语句,不推荐

浙公网安备 33010602011771号