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