mybatis教程--延迟加载详解

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

内容简介: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 中。


以上所述就是小编给大家介绍的《mybatis教程--延迟加载详解》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Cyberwar

Cyberwar

Kathleen Hall Jamieson / Oxford University Press / 2018-10-3 / USD 16.96

The question of how Donald Trump won the 2016 election looms over his presidency. In particular, were the 78,000 voters who gave him an Electoral College victory affected by the Russian trolls and hac......一起来看看 《Cyberwar》 这本书的介绍吧!

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

Markdown 在线编辑器

html转js在线工具
html转js在线工具

html转js在线工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具