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教程--延迟加载详解》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

100个可操作的网络赚钱方法

100个可操作的网络赚钱方法

陶秋丰 / 云南科技 / 2009-12 / 29.80元

《100个可操作的网络赚钱方法》专为有志于网上创业的读者量身打造,作者是“实战型”的网赚高手,在17岁时就通过互联网创业“年人10万”,如今结合自身的亲身实战经验,与大家分享可以实实在在盈利的100个网络赚钱方法和技巧。内容包括:网站创建与推广、竞价广告、联盟赚钱、网站SEO优化、域名投资、广告投放盈利、威客、博客、淘客赚钱等多个方面。 本手册中作者结合自身的网络赚钱经历,通过具体的、可操作......一起来看看 《100个可操作的网络赚钱方法》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具