Mybatis知识整理(十)Mybatis之延迟加载

  延迟加载:就是按照我们的需求去加载sql获取请求数据。例如在关联表进行查询时,为了减轻数据库的压力,我们先执行一张表的查询获取数据看看能否满足当前应用,如果不满足再去关联查询。mybatis默认没有开启延迟加载,需要在SqlMapConfig.xml中setting配置。

resultMap可以实现高级映射(使用association、collection实现一对一及一对多映射),association、collection具备延迟加载功能。

我们先进行oa_topic表的查询,在需要的时候再去加载关联to_forum的查询

(mapper.xml)

 

<!--一================================================延迟加载===============================================================-->
 <!--查询发帖标题关联所属的分类的resultMap
将整个查询结果映射到com.mybatis.po.Topic中-->
 <resultMap type="com.mybatis.po.Topic" id="topicToForumResultMapLazyLoading" >
     <!--配置要映射的发帖标题信息-->
     <!--id:指定查询列中的唯一的标识,发帖标题信息的唯一标识,如果有多个列组成唯一标识,那么需要配置多个id-->
     <!--column:唯一标识的列-->
     <!--property:要映射到的com.mybatis.po.Topic中的哪一个属性-->
     <id column="id" property="id"/>
     <!--需要多少个result映射就写多少个-->
     <result column="title" property="title"/>
     <result column="content" property="content"/>
     <!--配置要映射关联的所属分类的信息-->
     <!--association:用于映射关联查询单个对象的查询信息-->
     <!--property:要将关联查询的信息关联到com.mybatis.po.Topic的哪个属性-->
     <!--javaType: 属性的类型-->
     <association property="forum" javaType="com.mybatis.po.Forum" select="findForumResultMapLazyLoading" column="forumId">
         <!--实现分类的延迟加载-->
         <!--select:指定延迟加载需要执行的statement的id(是根据forunId来查询分类信息的statement)-->
         <!--column:发帖信息中关联分类信息的列-->
         <!--关联查询的sql:SELECT oa_topic.*,oa_forum.name,oa_forum.description FROM oa_topic,oa_forum-->
         <!--WHERE oa_topic.forumId = oa_forum.id-->
     </association>
 </resultMap>
 <!--查询发帖标题关联所属的分类,使用延迟加载-->
 <select id="findTopicToForumResultMapLazyLoading" resultMap="topicToForumResultMapLazyLoading">
     SELECT * FROM oa_topic
 </select>
 <select id="findForumResultMapLazyLoading" parameterType="int" resultType="com.mybatis.po.Forum">
     SELECT * FROM oa_forum WHERE id =#{id}
 </select>

 

(SqlMapConfig.xml)

 

 

<!--全局配置参数 :二级缓存,延迟加载-->
<settings>
    <!--打开延迟加载的开关-->
    <setting name="lazyLoadingEnabled" value="true"/>
    <!--将积极加载改为消极加载,即按需加载-->
    <setting name="aggressiveLazyLoading" value="false"/>
</settings>

(mapper.java)

 

//    查询发帖标题关联所属的分类,使用延迟加载
public List<Topic> findTopicToForumResultMapLazyLoading() throws  Exception;

(测试类)

 

@Test
public void findTopicToForumByIdResultMapLazyLoadingTest() throws Exception {
    SqlSession sqlSession=sqlSessionFactory.openSession();
    TopicToForumMapper topicToForumMapper=sqlSession.getMapper(TopicToForumMapper.class);
    List<Topic> topicList= topicToForumMapper.findTopicToForumResultMapLazyLoading();
    for(Topic topic :topicList){
        //执行getForum()去执行查询分类信息,这里就是按需加载,也就是懒加载
        Forum forum=topic.getForum();
        System.out.println("懒加载:"+forum.getName());
    }
    sqlSession.close();
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值