分步查询、分步查询延迟加载
项目目录
1.mybatis-config.xml
分步查询延迟加载需要在MyBatis核心配置文件中做以下配置:
<settings>
<!-- 开启延迟加载 -->
<setting name="lazyLoadingEnabled" value="true"></setting>
<!-- 是否查询所有数据 -->
<setting name="aggressiveLazyLoading" value="false"></setting>
</settings>
2.DeptMapper.java
public interface DeptMapper {
Dept getDeptByDid(String did);
}
3.DeptMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.mapper.DeptMapper">
<select id="getDeptByDid" resultType="Dept">
select did,dname from dept where did=#{did}
</select>
</mapper>
4.EmpDeptMapper.java
public interface EmpDeptMapper {
List<Emp> getAllEmp();
Emp getEmpStep(String eid);//分步查询
}
5.EmpDeptMapper.xml
添加查询语句
<resultMap type="Emp" id="empMapStep">
<id column="eid" property="eid"/>
<result column="ename" property="ename"/>
<result column="age" property="age"/>
<result column="sex" property="sex"/>
<!--
select:分步查询的SQL的id,即接口全限定名.方法名或者namespace.SQL的id
column:分步查询的条件,注意:此条件必须是从数据库查询过的
-->
<association property="dept" select="com.atguigu.mapper.DeptMapper.getDeptByDid" column="did"></association>
</resultMap>
<!-- Emp getEmpStep(String eid); -->
<select id="getEmpStep" resultMap="empMapStep">
select eid,ename,age,sex,did from emp where eid = #{eid}
</select>
6.TestEmpDept.java
public class TestEmpDept {
public static void main(String[] args) throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
EmpDeptMapper mapper = sqlSession.getMapper(EmpDeptMapper.class);
Emp emp = mapper.getEmpStep("3");
System.out.println(emp.getEname());
System.out.println(emp.getDept());
}
}
7.运行结果
执行emp.getEname()运行结果为前四行
再执行emp.getDept()运行结果为八行
DEBUG 04-06 09:48:10,087 ==> Preparing: select eid,ename,age,sex,did from emp where eid = ? (BaseJdbcLogger.java:145)
DEBUG 04-06 09:48:10,102 ==> Parameters: 3(String) (BaseJdbcLogger.java:145)
DEBUG 04-06 09:48:10,147 <== Total: 1 (BaseJdbcLogger.java:145)
王五
DEBUG 04-06 09:48:10,147 ==> Preparing: select did,dname from dept where did=? (BaseJdbcLogger.java:145)
DEBUG 04-06 09:48:10,148 ==> Parameters: 3(Integer) (BaseJdbcLogger.java:145)
DEBUG 04-06 09:48:10,149 <== Total: 1 (BaseJdbcLogger.java:145)
Dept [did=3, dname=研发部]