Mybatis 懒加载使用及源码分析

打印 上一主题 下一主题

主题 908|帖子 908|积分 2724

Mybatis 懒加载的使用

什么是懒加载?懒加载的意思就是在使用的时候才去加载,不使用不去加载,相反的就叫饥饿加载或者立即加载。懒加载在Mybatis中一般是存在与联合查询的情况,比如查询一个对象的同时连带查询相关的表对应的数据。在Mybatis中查询可以通过ResultMap设置查询对象返回一个集合属性,也就是说像这样的:
  1. @Data
  2. public class User implements Serializable {
  3.     private int id;
  4.     private int age;
  5.     private String name;
  6.     private List<Order> orderList;
  7. }
复制代码
这里的orderList就是一个集合,在mapper.xml中配置如下:
  1. <resultMap id="userMap" type="mybatis.model.User">
  2.     <id column="id" property="id"/>
  3.     <result property="age" column="age"/>
  4.     <result property="name" column="name"/>
  5.     <collection property="orderList" ofType="mybatis.model.Order" column="id" select="findByUid"/>
  6. </resultMap>
  7. <select id="findByUid" resultType="mybatis.model.Order">
  8.     select * from `order` where uid = #{id}
  9. </select>
  10. <select id="selectById" resultMap="userMap">
  11.     select * from user where id = #{id}
  12. </select>
复制代码
可以看到这里查询User对象的时候还查询了Order列表,这个用户关联的订单信息。如果只是这样查询那么结果是饥饿加载:
  1. @Test
  2. public void testLazyLoad(){
  3.     SqlSession sqlSession = sqlSessionFactory.openSession();
  4.     UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  5.     User user = mapper.selectById(1);
  6.     System.out.println(user.getName());
  7. }
复制代码
输出结果,执行了两个sql语句查询,说明查询User的同时也查询了Order
[code]09:52:56.575 [main] INFO mybatis.plugins.MyPlugin - 对方法进行增强....==>  Preparing: select * from user where id = ? ==> Parameters: 1(Integer) Parameters: 1(Integer) type, MethodHandler callback, List
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

杀鸡焉用牛刀

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表