Employee.java
public class Employee { private Integer id; String lastName; String gender; String email; Department dept; }
Department.java
Department { String deptName; private List<Employee> employee; }
EmployeeMapperPlus.java
interface EmployeeMapperPlus { public List<Employee> getEmpsByDeptId(Integer id); }
EmployeeMapperPlus.xml
<select id="getEmpsByDeptId" resultType="com.gong.mybatis.bean.Employee"> select * from tbl_employee where d_id=#{deptId} </select>
DepartmentMapper.java
DepartmentMapper { public Department getDeptByIdStep(Integer id); }
DepartmentMapper.xml
resultMap type="com.gong.mybatis.bean.Department" id="MyDeptStep"> id column="id" property="id"/> result ="dept_name"="deptName"collection property="employee" select="com.gong.mybatis.dao.EmployeeMapperPlus.getEmpsByDeptId" column> collection> resultMap="getDeptByIdStep" resultMap select id,dept_name from tbl_department where id=#{id} >
同样的在mybatis配置文件中:
settingssetting name="lazyLoadingEnabled" value="true"="aggressiveLazyLoading"="false"/> >
最后进行测试:
package com.gong.mybatis.test; import java.io.IOException; java.io.InputStream; java.util.List; java.util.Map; org.apache.ibatis.io.Resources; org.apache.ibatis.session.sqlSession; org.apache.ibatis.session.sqlSessionFactory; org.apache.ibatis.session.sqlSessionFactoryBuilder; org.junit.Test; com.gong.mybatis.bean.Department; com.gong.mybatis.bean.Employee; com.gong.mybatis.dao.DepartmentMapper; com.gong.mybatis.dao.EmployeeMapperPlus; TestMybatis2 { public sqlSessionFactory getsqlSessionFactory() throws IOException { String resource = "mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(resource); return new sqlSessionFactoryBuilder().build(is); } @Test void test2() IOException { sqlSessionFactory sqlSessionFactory = getsqlSessionFactory(); sqlSession openSession = sqlSessionFactory.openSession(); try { DepartmentMapper mapper = openSession.getMapper(DepartmentMapper.); Department department = mapper.getDeptByIdStep(1); System.out.println(department.getDeptName()); openSession.commit(); } finally { openSession.close(); } } }
首先我们只需要部门的名字:
结果:
DEBUG 01-20 19:35:58,093 ==> Preparing: select id,dept_name from tbl_department where id=? (BaseJdbcLogger.java:145)
DEBUG 01-20 19:35:58,167 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:145)
DEBUG 01-20 19:35:58,299 <== Total: 1 (BaseJdbcLogger.java:145)
开发部
sql语句只发送了一次。
接下来我们需要部门里面员工信息:
添加:
System.out.println(department.getEmployee());
结果:
DEBUG 01-20 19:50:48,861 ==> Preparing: select id,dept_name from tbl_department where id=? (BaseJdbcLogger.java:145)
DEBUG 01-20 19:50:48,948 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:145)
DEBUG 01-20 19:50:49,123 <== Total: 1 (BaseJdbcLogger.java:145)
开发部
DEBUG 01-20 19:50:49,125 ==> Preparing: select * from tbl_employee where d_id=? (BaseJdbcLogger.java:145)
DEBUG 01-20 19:50:49,126 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:145)
DEBUG 01-20 19:50:49,129 <== Total: 2 (BaseJdbcLogger.java:145)
[Employee [id=1,lastName=xiximayou,gender=1,email=xiximayou@qq.com,dept=null],Employee [id=3,lastName=小红,gender=0,email=xiaohong@qq.com,dept=null]]
发送了两条sql语句。