我是靠谱客的博主 纯真柜子,最近开发中收集的这篇文章主要介绍mybatis延迟加载,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

       在Mybatis中,通常会进行多表联合查询,但是有的时候并不会立即用到所有的联合查询结果,此时需要一种机制,当需要的时候再查询,这种“按需查询”的机制,就可以使用延迟加载来实现。

       延迟加载可以做到,先从单表查询,需要时再从关联表关联查询,这样可以大大提高数据库的性能,因为查询单表要比关联查询多张表速度快。

首先给出javaBean,然后在Mapper映射文件定义查询操作

public class BatchItem {

	private int batch_id;
	private int cus_id;
	private String number;
	private Date createtime;
	private String note;
	private Customer customer;
   //set,get
}
public class Customer {

	private int cus_id;
	private String username;
	private String acno;
	private String gender;
	private String phone;
    //set,get
}

在mapper.xml中定义select操作 

<select id="lazyLoadTest"  resultMap="lazyLoadTestResultMap">
		select * from batch	
</select>

编写resultMap

<resultMap type="cn.com.mybatis.po.BatchItem" id="lazyLoadTestResultMap">
		<id column="batch_id" property="batch_id"/>
		<result column="cus_id" property="cus_id"/>
		<result column="number" property="number"/>
		<result column="createtime" property="createtime"/>
		<result column="note" property="note"/>
		<!-- 实现延迟加载用户信息 -->
		<association property="customer" javaType="cn.com.mybatis.po.Customer"
			select="findCustomerById" column="cus_id">
		</association>
</resultMap>

这里使用association进行关联,其中使用select及column实现延迟加载用户信息。select用来指定延迟加载所需要执行的SQL语句,也就是指定Mapper.xml配置文件中的某个select标签的id,而column是指订单信息中关联用户信息查询的列,这里关联的是用户的主键,即cus_id。最后给出select语句

<select id="findCustomerById" parameterType="int" resultType="cn.com.mybatis.po.Customer">
		select * from customer where cus_id=#{id}
</select>

上面的配置会被用来延迟加载的resultMap中的association调用,输入参数就是association中column中定义的字段信息。

 

在编写测试方法之前,首先开启延迟加载功能,在sqlConfig.xml中配置setting属性

<settings>
		<!-- 打开延迟加载的开关 -->
		<setting name="lazyLoadingEnabled" value="true"/>
		<!-- 将积极加载改为消极加载(即按需加载) -->
		<setting name="aggressiveLazyLoading" value="false"/>
	</settings>

说明:

       lazyLoadingEnabled设置全局性懒加载,可设置的值为“false”和”true“。若为false,则所有相关联的数据都会被初始化加载,否则会延迟加载相关的数据

      aggressiveLazyLoading设置积极加载,可设置的值为false和true,当设置为true时,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。

测试方法:

@Test
	public void TestLazyLoad() throws IOException{
		SqlSession sqlSession = dataCon.getSqlSession();
		List<BatchItem> list = sqlSession.selectList("bank.lazyLoadTest");
		for (BatchItem batchItem : list) {
			System.out.println("订单编号:"+batchItem.getNumber());
			System.out.println("订购用户姓名:"+batchItem.getCustomer().getUsername());
		}
		//关闭sqlSession会话
		sqlSession.close();
	}

只有用到customer这个对象时才会加载它

最后

以上就是纯真柜子为你收集整理的mybatis延迟加载的全部内容,希望文章能够帮你解决mybatis延迟加载所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部