之前说了由Employee找Department,这一节讲一讲由Department找Employee,显然前者是多对一的关系,而后者是一对多的关系。
Department的JavaBean:
private Integer id; private String departmentName; private List<Employee> employeeList; |
接口中的方法:
Department getDepByIdPlus(Integer id);
查询的SQL语句:
<select id="getDepByIdPlus" resultMap="Dep"> SELECT d.`id` did,d.`department_name` dep_name,e.`id` eid,e.`last_name` last_name,e.`email` email,e.`gender` gender FROM tb_department d LEFT JOIN tb_employee e ON d.`id`=e.`d_id` WHERE d.`id`=2; </select> |
接下来编写resultMap,
collection:定义关联集合类型的属性的封装规则
ofType:指定集合里面的元素类型
<resultMap id="Dep" type="com.figsprite.bean.Department"> <id property="id" column="did"/> <result property="departmentName" column="dep_name"/> <collection property="employeeList" ofType="com.figsprite.bean.Employee"> <id property="id" column="eid"/> <result property="lastName" column="last_name"/> <result property="gender" column="gender"/> <result property="email" column="email"/> </collection> </resultMap> |
其实就是一个resultMap套着另外一个resultMap格式的collection
@Test public void test2() throws IOException { SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession sqlOpenSession = sqlSessionFactory.openSession(); try { DepartmentMapper departmentMapper = sqlOpenSession.getMapper(DepartmentMapper.class); Department department = departmentMapper.getDepByIdPlus(1); for (Employee e : department.getEmployeeList()) { System.out.println(e); } } finally { sqlOpenSession.close(); } } |