学习笔记之mybatis延迟加载
需要的原因,如果想要查询订单信息,但是以后也需要查询和订单关联的用户信息,只是现在不查询,那么就是延迟加载。
延迟加载可以提高搜索表的速度
延迟加载实现的过程:
拥有一个有主表属性和延迟加载表属性的pojo类
定义两个statement语句即可,一个查询主表,一个完成查询要延迟加载的表
在xml文件中配置:
<!-- 延迟加载 -->
<select id="findUserLazy" resultMap="ordersLazyFind"> //这个是主表查询的方式
select orders.* from orders
</select>
<select id="findUserById" parameterType="int" resultType="com.mb.po.UserShopCustom">//这是被延迟加载表查询的类
select * from users where users.id=#{id}
//这个参数,应该与表和这个表关联的列名,并且被延迟查询的表必须有参数,为了与关联表连接用(不确定)
</select>
<resultMap type="com.mb.po.UserShopQuery1" id="ordersLazyFind" >
<id column="id" property="id"/>
<result column="users_id" property="users_id"/>
<!-- colmun:是它订单信息中关联用户信息的列 , (会与statement的参数匹配(这句不确定))
select: 需要延迟加载的statement id
-->
<association property="userShopCustom" javaType="com.mb.po.UserShopCustom"
column="users_id" select="findUserById">
</association>
</resultMap>
如何调用它?
List<UserShopQuery1> ordersLazy=shopUserMapper.findUserLazy();
for(UserShopQuery1 userShopQuery1:ordersLazy)
{
//通过新建查询出来的主表中的被延迟查询表的属性对象(get方法)来输出被延迟查询的表
UserShopCustom userShopCustom=userShopQuery1.getUserShopCustom();System.out.println(userShopCustom);
}
自我感受延迟查询的过程:
第一步:新建主表pojo类
2.只查询主表属性时,
需要延迟加载表属性时: