mybatis文件映射之利用延迟加载解决collection分布查询(六)
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) 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) 发送了两条sql语句。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |