MyBatis——延迟加载(懒加载)

延迟加载(懒加载)

先举一个列子:
一个订单列表中有商品信息,等用户需要查看订单列表中的商品信息的时候,才再去加载商品信息。
延迟加载大概就是这个思想吧

实现步骤

1、在配置文件中打开延迟加载开关

	<settings>
		<setting name="lazyloaddingEnabled" value="true"/>
		<setting name="aggressivelazyLoading" value="false"/>
	</settings>

2、配置mapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  <mapper namespace="com.etime.dao.SysRoleMapper">
	<resultMap type="com.etime.pojo.SysRole" id="sysRoleMap">
	<!-- id定义的是表的主键
		column:数据库的字段
		property:pojo对象的属性
		主要解决的问题是字段名和实体属性不一致的问题
	 -->
	<id column="roleid" property="roleid"/>
	<result column="rolename" property="rolename"/>
	<result column="roledesc" property="roledesc"/>
	<result column="rolestate" property="rolestate"/>
	</resultMap>
	<resultMap type="com.etime.dto.SysRoleDto" id="roleUserMap2" extends="sysRoleMap">
		<collection property="userlist" ofType="com.etime.pojo.SysUser" column="roleid" 
		 select="selectUserByRoleid"/>
	</resultMap>
	
	<!-- sql片段 -->
	<sql id="sql_sysrole">
		roleid,rolename,rolestate,roledesc
	</sql>
	
	<select id="selectRolelist2" resultMap="roleUserMap2">
		select
		<include refid="sql_sysrole"></include>
		from sysrole
	</select>
	<!-- 一对多 -->
	<select id="selectRoleUser" resultMap="roleUserMap2" >
		select a.roleid,rolename,rolestate,roledesc,b.userid,b.username,b.usertruename
		from sysrole a inner join sysuser b on a.roleid = b.roleid
	</select>
	</mapper>

3、测试结果

public class Test01 {
	public static void main(String[] args) throws IOException {
		//读取MyBatis的核心配置文件
		InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
		//创建SqlSessionFactoryBuilder对象
		SqlSessionFactoryBuilder sessionFactoryBuilder = new SqlSessionFactoryBuilder();
		//通过SqlSessionFactoryBuilder对象去解析配置文件获取sqlSessionFactory对象
		SqlSessionFactory sessionFactory = sessionFactoryBuilder.build(resourceAsStream);
		//通过SqlSessionFactory对象创建SqlSession对象,openSession(boolean):true:自动提交;false:手动提交
		SqlSession sqlSession = sessionFactory.openSession();
		//懒加载测试
		List<SysRoleDto> selectList = sqlSession.selectList("com.etime.dao.SysRoleMapper.selectRolelist2");
		
		for(SysRoleDto sysrole : selectList) {
			System.out.println(sysrole.getUserlist());
		}
	}
}

总结

延迟加载感觉作用不是很大,但是还是要体会这种思想,用到了再去加载,没用到就不用加载出来。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值