MyBatis延迟加载实例

MyBatis优化之延迟加载实例

什么是延迟加载:

​ 在MyBatis中经常会进行多表查询,但是有的时候不会立即用到所有的联合查询结果。例如查询一个游戏玩家的基本信息,这个时候并不会去用这个玩家个人仓库里的物品列表,等到玩家去交易或者取/拿物品时才会查询,这种按需查询的机制就是延迟加载,合理利用延迟加载可以大大提高系统的查询效率;

如何实现:

​ 首先我们要在MyBatis的全局配置setting中加入这两个玩意儿:

 <!--设置是否启用懒加载/延迟加载,不启用的话,所有相关联的数据都会被初始化加载"/>
		-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--按需加载/消极加载开关 延迟加载也需要开启,默认为积极true-->
        <setting name="aggressiveLazyLoading" value="false"/>

然后在Mapper映射文件中整一个查询:

<!--咱们这里虚空查询,假设有这么一张User表,关联了另外一张仓库表warehouse-->
<select id="findUser" resultMap="UserLazyLoading" >
       SELECT
	        *
       FROM
	        User
</select>

然后是重头戏resultMap:

<resultMap id="UserLazyLoading" type="User">
        <id column="u_id" property="u_id" />
        <result column="u_name" property="u_name"/>
        <!--这里用select关联了另外一条sql语句-->
        <association property="warehouse" javaType="WareHouse"
        select="findWareHouseByid" column="u_id"    
        </association>
</resultMap>

延迟加载要执行的SQL:

<select id="findWareHouseByid" parameterType="int" resultType="wareHouse">
       SELECT
	        *
       FROM
	        wareHouse
   	   WHERE
    		u_id=#{id}
</select>

最后整个测试类测试一下:

emmm,表都没有怎么测

算了。。。。

最后我们总结一下延迟加载的实现步骤:

  1. 执行mapper方法,只进行单表查询(我们例子中只进行了user基本信息的查询);
  2. 当我们实际调用时,用到了仓库信息,这个时候去执行延迟加载;
  3. 进行延迟加载,把我们关联的SQL执行,获取仓库里面的玩意儿;

ok完事儿!最后强调:用好延迟加载可以大大优化MyBatis查询效率!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值