文章目录
Mybaits表关系之1对多
将查询出来的字段值,装填到对象集合属性中,完成对象属性的创建和赋值。查询出来的一行可能只是对象的一部分,因为对象集合属性可能还不完全。对象集合属性需要指定装填。
查询dept表,并且把部门下的所有雇员对象装填到集合对象属性中
dept对象
public class Dept {
private Integer deptId;
private String deptName;
private String deptDesc;
// 一个Dept对象具有多个 Emp对象 1对多的关联关系
private List<Emp> emps;
查询所有dept,完成 emps
属性的填充
<resultMap type="Dept" id="baseMap">
<id column="dept_id" property="deptId"/>
<result column="dept_name" property="deptName"/>
<result column="dept_desc" property="deptDesc"/>
<!-- 1 对 多的关联关系通过 collection配置
property 对应的就是对象中的多的那方的变量名称
ofType:就是集合中的泛型的类型
-->
<collection property="emps" ofType="emp">
<id column="emp_id" property="empId"/>
<result column="emp_name" property="empName"/>
<result column="emp_age" property="empAge"/>
</collection>
</resultMap>
<select id="query" resultMap="baseMap">
select
t1.dept_id
,t1.dept_name
,t1.dept_desc
,t2.emp_id
,t2.emp_name
,t2.emp_age
from t_dept t1
left join t_emp t2
on t1.dept_id = t2.dept_id
</select>
测试一下
@Test
public void test1() throws IOException {
InputStream in = Resources.getResourceAsStream("mybatis-cfg.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
SqlSession session = factory.openSession(true);
DeptMapper dao = session.getMapper(DeptMapper.class);
List<Dept> list = dao.query();
for (Dept dept : list) {
System.out.println(dept);
System.out.println("----"+dept.getEmps());
}
session.close();
}
打印输出粘贴
[QC] DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(159) | ==> Preparing: select t1.dept_id ,t1.dept_name ,t1.dept_desc ,t2.emp_id ,t2.emp_name ,t2.emp_age from t_dept t1 left join t_emp t2 on t1.dept_id = t2.dept_id
[QC] DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(159) | ==> Parameters:
[QC] DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(159) | <== Total: 10
Dept [deptId=3, deptName=研发部, deptDesc=yfb]
----[Emp [empId=1, empName=孙悟空, empAge=13], Emp [empId=7, empName=美杜莎, empAge=17]]
Dept [deptId=2, deptName=销售部, deptDesc=xsb]
----[Emp [empId=2, empName=刘德华, empAge=15], Emp [empId=3, empName=刘诗诗, empAge=16]]
Dept [deptId=1, deptName=小卖部, deptDesc=xmb]
项目打包 提取码:a52i
环境:eclipse,maven