Mybatis学习系列(六)延迟加载

延迟加载其实就是将数据加载时机推迟,比如推迟嵌套查询的执行时机。在Mybatis中经常用到关联查询,但是并不是任何时候都需要立即返回关联查询结果。比如查询订单信息,并不一定需要及时返回订单对应的产品信息,查询商品分类信息并不一定要及时返回该类别下有哪些产品,这种情况一下需要一种机制,当需要查看时,再执行查询,返回需要的结果集,这种需求在Mybatis中可以使用延迟加载机制来实现。延迟加载可以实现先查询主表,按需实时做关联查询,返回关联表结果集,一定程度上提高了效率。

Mapper.xml映射文件

以商品类别category和商品product为例,一个类别下可以有多个商品,一个商品属于一种类别。

编写lazyLoadMapper.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.sl.mapper.LazyLoadMapper"> <!-- 分类信息查询 --> <select id="lazyLoadTest" resultMap="lazyLoadProductsByCategoryTest"> select * from category where id=#{id} </select> <resultMap id="lazyLoadProductsByCategoryTest" type="com.sl.po.Category"> <id column="id" property="Id"></id> <result column="name" property="Name"></result> <result column="remark" property="Remark"></result> <!-- 一个分类对应多个产品,此处使用collection --> <collection property="productList" ofType="com.sl.po.Product" column="id" select="selectProductsByCategoryId"></collection> </resultMap> <!-- 嵌套查询返回商品信息,延迟加载将要执行的sql --> <select id="selectProductsByCategoryId" resultType="com.sl.po.Product"> select * from products where categoryid=#{id} </select> </mapper>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfgdp.html