10. 延迟加载
大约 2 分钟
延迟加载
延迟查询是一对一和一对多查询的延续。 在默认的一对一和一对多中,一条SQL就能够查询到所有数据,但是,有的数据有时候一时半会用不上,例如查询员工,捎带获取员工的部门数据,但是部门数据使用的频率很低,这种时候可以使用延迟查询,首先获取到所有的员工数据,然后在需要的时候再去获取部门数据。当需要使用数据的时候才去加载既是延迟加载
2.1开启延迟加载
全局配置文件中配置
2.2 1对1延迟加载
要开启延迟加载那么我们的SQL语句查找操作也得分成多次操作
<resultMap id="baseMap1" type="emp">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<association property="dept" javaType="Dept"
column="deptid" select="queryDeptById">
<id column="deptid" property="deptid"/>
<result column="dname" property="dname"/>
</association>
</resultMap>
<select id="queryDeptById" parameterType="int" resultType="dept">
SELECT * FROM t_dept where deptid = #{deptid}
</select>
<select id="queryEmp" resultMap="baseMap1">
SELECT
*
FROM
t_emp t1
</select>
延迟加载的效果
只使用主表数据,没有使用从表数据的操作,会开启延迟加载
当使用了从表的数据那么就会操作从的数据
2.3 1对多的延迟加载
同样的也得将SQL语句拆分为多个SQL执行
<resultMap id="baseMap2" type="dept">
<id column="deptid" property="deptid"/>
<result column="dname" property="dname"/>
<collection property="emps" ofType="emp" column="deptid" select="queryEmpByDid">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
</collection>
</resultMap>
<select id="queryDept" resultMap="baseMap2">
SELECT
*
FROM t_dept t1
</select>
<select id="queryEmpByDid" parameterType="int" resultType="emp" >
SELECT * FROM t_emp where deptid = #{deptid}
</select>