ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Mybatis 懒加载使用及源码分析
[打印本页]
作者:
杀鸡焉用牛刀
时间:
2022-9-16 17:22
标题:
Mybatis 懒加载使用及源码分析
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
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4