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 中。


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

查看所有标签

猜你喜欢:

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

高性能JavaScript

高性能JavaScript

Nicholas C.Zakas / 丁琛、赵泽欣 / 电子工业出版社 / 2010-11 / 49.00元

如果你使用JavaScript构建交互丰富的Web应用,那么JavaScript代码可能是造成你的Web应用速度变慢的主要原因。《高性能JavaScript》揭示的技术和策略能帮助你在开发过程中消除性能瓶颈。你将会了解如何提升各方面的性能,包括代码的加载、运行、DOM交互、页面生存周期等。雅虎的前端工程师Nicholas C. Zakas和其他五位JavaScript专家介绍了页面代码加载的最佳方......一起来看看 《高性能JavaScript》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试