mybatis教程--延迟加载详解

栏目: 数据库 · 发布时间: 7年前

内容简介:mybatis教程--延迟加载详解

延迟加载

使用延迟加载意义

在进行数据查询时, 为了提高数据库查询性能 ,尽量使用单表查询,因为单表查询比多表关联查询速度要快。

如果查询单表就可以满足需求,一开始先查询单表,当需要关联信息时,再关联查询,当需要关联信息再查询这个叫延迟加载。

mybatis resultMap 提供延迟加载功能,通过 resultMap 配置延迟加载。

2 配置 mybatis 支持延迟加载

mybatis教程--延迟加载详解

在 SqlMapConfig.xml中配置全局参数:

<!-- 全局配置参数 -->

<settings>

<!-- 延迟加载总开关 -->

<setting name="lazyLoadingEnabled" value="true" />

<!-- 设置按需加载 -->

<setting name="aggressiveLazyLoading" value="false" />

</settings>

延迟加载实现

3.1  实现思路

需求:

查询订单及用户的信息,一对一查询。

刚开始只查询订单信息

当需要用户时调用 Orders 类中的 getUser() 方法执行延迟加载 ,向数据库发出 sql

3.2  mapper.xml

<!-- 一对一查询延迟加载
	 开始只查询订单,对用户信息进行延迟加载 
	  -->
	 <select id="findOrderUserListLazyLoading" resultMap="orderCustomLazyLoading">
		 SELECT 
		  orders.*
		FROM
		  orders
	 </select>

3.3  resultMap

<!-- 一对一查询延迟加载 的配置 -->
	<resultMap type="orders" id="orderCustomLazyLoading">
		<!-- 完成了订单信息的映射配置 -->
		<!-- id:订单关联用户查询的唯 一 标识 -->
		<id column="id" property="id" />
		<result column="user_id" property="userId" />
		<result column="number" property="number" />
		<result column="createtime" property="createtime" />
		<result column="note" property="note" />
		<!-- 配置用户信息的延迟加载 select:延迟加载执行的 sql 所在的statement的id,如果不在同一个namespace需要加namespace 
			sql:根据用户id查询用户信息 column:关联查询的列 property:将关联查询的用户信息设置到Orders的哪个属性 -->
		<association property="user"
			select="com.sihai.mybatis.mapper.UserMapper.findUserById" column="user_id"></association>


	</resultMap>

3.4  mapper.java

//一对一查询,延迟加载
	public List<Orders> findOrderUserListLazyLoading() throws Exception;

3.5  测试代码

// 一对一查询延迟加载
	@Test
	public void testFindOrderUserListLazyLoading() throws Exception {

		SqlSession sqlSession = sqlSessionFactory.openSession();
		// 创建mapper代理对象
		OrdersMapperCustom ordersMapperCustom = sqlSession
				.getMapper(OrdersMapperCustom.class);

		// 调用方法
		List<Orders> list = ordersMapperCustom.findOrderUserListLazyLoading();
		
		//这里执行延迟加载,要发出sql
		User user = list.get(0).getUser();
		System.out.println(user);
		
	}

4 resultType resultMap 、延迟加载使用场景总结

4.1 延迟加载:

延迟加载实现的方法多种多样,在只查询单表就可以满足需求,为了提高数据库查询性能使用延迟加载,再查询关联信息。

mybatis 提供延迟加载的功能用于 service 层。

4.2 resultType

作用:

将查询结果按照 sql 列名 pojo 属性名一致性映射到 pojo 中。

场合:

常见一些明细记录的展示,将关联查询信息全部展示在页面时,此时可直接使用 resultType 将每一条记录映射到 pojo 中,在前端页面遍历 list list 中是 pojo )即可。

4.3 resultMap

使用 association collection 完成一对一和一对多高级映射。

4.4 association

作用:

将关联查询信息映射到一个 pojo 类中。

场合:

为了 方便获取关联 信息可以使用 association 将关联订单映射为 pojo ,比如:查询订单及关联用户信息。

4.5 collection

作用:

将关联查询信息映射到一个 list 集合中。

场合:

为了 方便获取关联信息 可以使用 collection 将关联信息映射到 list 集合中,比如:查询用户权限范围模块和功能,可使用 collection 将模块和功能列表映射到 list 中。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Beautiful Code

Beautiful Code

Greg Wilson、Andy Oram / O'Reilly Media / 2007-7-6 / GBP 35.99

In this unique work, leading computer scientists discuss how they found unusual, carefully designed solutions to difficult problems. This book lets the reader look over the shoulder of major coding an......一起来看看 《Beautiful Code》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具