学习笔记之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类

学习笔记之mybatis延迟加载

2.只查询主表属性时,

学习笔记之mybatis延迟加载

需要延迟加载表属性时:

学习笔记之mybatis延迟加载