延迟加载,缓存

延迟加载

加载时机
侵入式延迟:执行对主加载对象的查询时,不会执行对关联对象的查询。但当要访
问主加载对象的详情属性时,就会马上执行关联对象的select查询。。
深度延迟:执行对主加载对象的查询时,不会执行对关联对象的查询。访问主加载对象的详情时也不会执行关联对象的select查询。只有当真正访问关联对象的详 情时,才会执行对关联对象的select 查询。
注意:延迟加载的应用要求:关联对象的查询与主加载对象的查询必须是分别进行的
select语句,不能是使用多表连接所进行的select查询。因为,多表连接查询,实质是对一张表的查询,对由多个表连接后形成的一-张表的查询。会一次性将多张表的所有信息查询出来。。

侵入式延迟

先到大配置文件(mybatis_config.xml)开启延迟加载

 <setting name="lazyLoadingEnabled" value="true"/>
      <!--侵入式aggressiveLazyLoadingd的value为true   深入式aggressiveLazyLoading的value为false-->
 <setting name="aggressiveLazyLoading" value="true"/>

在调用主加载对像时不会加载第二条sql
在这里插入图片描述
调用加载对象时会产生两条sql
在这里插入图片描述

深度延迟

先到大配置文件(mybatis_config.xml)开启深度加载

 <setting name="lazyLoadingEnabled" value="true"/>
      <!--侵入式aggressiveLazyLoadingd的value为true   深入式aggressiveLazyLoading的value为false-->
 <setting name="aggressiveLazyLoading" value="false"/>

在调用主加载对像时不会加载第二条sql
在这里插入图片描述

缓存说明

为什么要用缓存?
1.提升应用程序性能
2.提高读取吞吐
3.降低数据库成量(IOPS)本
4.消除数据库热减少后端负载点

一级缓存说明

同一会话中(sqlsession)执行两个相同的sql,控制台会找上一条sql查询出来的缓存进行查找

        City citytoChild = sqlSession.getMapper(ISsmbms_CityDao.class).getCitytoChild(1);
         System.out.println(citytoChild.toString());
        City citytoChild2 = sqlSession.getMapper(ISsmbms_CityDao.class).getCitytoChild(1);
        System.out.println(citytoChild2.toString());

在这里插入图片描述
在citytoChild2对象查询的时候不会在查询一次sql会在缓存里面进行查找

增删改会清空缓存

	    City citytoChild = sqlSession.getMapper(ISsmbms_CityDao.class).getCitytoChild(1);
        System.out.println(citytoChild.toString());
        int i = sqlSession.getMapper(ISsmbms_CityDao.class).delRoleAll(8);
        sqlSession.commit();
        City citytoChild2 = sqlSession.getMapper(ISsmbms_CityDao.class).getCitytoChild(1);
        System.out.println(citytoChild2.toString());
        /*一级缓存在增删改,无论是否提交事务,缓存都会被清空,重新执行数据库查询
        二级缓存在增删改的情况下,如果提交则会清空缓存,如果不提交则会获取数据库缓存*/

在这里插入图片描述

关闭刷新缓存(关闭后不会在执行缓存)

flushCache属性默认为true,开启刷新缓存,将lushCache属性设置为true关闭刷新缓存

    <delete id="delRoleAll" flushCache="false">
        DELETE FROM city where cid=#{cid}
    </delete>

查询不应用缓存

useCache属性默认为true,应用缓存,将useCache属性设置为true不应用缓存

   <select id="getCitytoChildof" resultMap="proMap" useCache="false">
         select * from city WHERE pid=#{cid}
    </select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值