zoukankan      html  css  js  c++  java
  • 延迟加载以及mybatis一级二级缓存

     

    延迟加载

    延迟加载:在真正使用数据时才发起查询,不用的时候不查询,又叫按需查询(懒加载)

    立即加载:不管用不用,只要调用方法,直接发起查询

    表关系:一对多     多对一     一对一        多对多(mybatis中没有  多对一  的概念)

    一对多  多对多:通常采用延迟加载

    多对一 一对一:通常采用立即加载

    延迟加载的配置:

    复制代码
    主配置文件
     
    <!-- 配置延迟加载策略 -->
    <setting>
        <!-- 打开延迟加载的开关 -->
        <setting name="lazyLoadingEnabled" value="true" />
        <!-- 将积极加载改为消息加载即按需加载 -->
        <setting name="aggressiveLazyLoading" value="false" />    
    </setting>
    复制代码

    JavaType和ofType都是用来指定对象类型的,但是JavaType是用来指定pojo中属性的类型,而ofType指定的是映射到list集合属性中pojo的类型。

    mapper的一对一mapper中的配置

    复制代码
    <!-- 
        resultMap中的配置    
        property:pojo中的属性名
        javaType:全限定类名,配置了namespace后可简写
        select:指定查询的唯一标识:namespace.statement的id
        column:用户根据id查询时,所需的参数
    -->
        <association property="user"  javaType="user" 
        select="com.mybatis.dao.findById" column="uid" >
    </association>
    复制代码

     mapper的一对多mapper中的配置

    复制代码
    <!-- 
        resultMap中的配置    
        property:pojo中的属性名
        ofType:全限定类名,配置了namespace后可简写
        select:指定查询的唯一标识:namespace.statement的id
        column:用户根据id查询时,所需的参数
    -->   
         <collection  property="accounts"   ofType="account"
         select="com.mybatis.dao.findById" column="uid">
        </collection>
    复制代码

    缓存
    什么是缓存:存在于内存中的临时数据

    为什么使用缓存:减少和数据库的交互,提高执行效率

    什么样的数据用缓存:

    经常查询并且不经常改变的数据
    数据的正确与否对最终结果影响不大的
    mybatis的一级缓存:
    一级缓存指的是mybatis中SqlSession对象的缓存

    当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供的一块区域中

    该区域的结构是一个Map,当我们再次查询同样的数据,mybatis会先去sqlSession中查询是否有,有直接拿来用

    当SqlSession对象消失时,mybatis的一级缓存也就消失了

    当调用SqlSession的修改,添加,删除,commit(),close()等方法时,就会清空一级缓存

    mybatis的二级缓存:(存储的是数据而不是对象,所以两次查询对象的equels为false)
    二级缓存指的是mybatis中SqlSessionFactory对象的缓存,由同一个SqlSessionFactory对象创建的SqlSession共享其缓存

    MyBatis的二级缓存

      二级缓存不比一级缓存,需要在configuration.xml中手动开启。

    二级缓存是全局应用级别的缓存,即使关闭了session仍能使用。

    如果一个select标签想要局部关闭二级缓存,需要设置useCache=false

    二级缓存不能使用注解方法配置

    如果在执行增删改操作的过程中不刷新缓存,须设置flushCache=false

  • 相关阅读:
    有点忙啊
    什么是协程
    HDU 1110 Equipment Box (判断一个大矩形里面能不能放小矩形)
    HDU 1155 Bungee Jumping(物理题,动能公式,弹性势能公式,重力势能公式)
    HDU 1210 Eddy's 洗牌问题(找规律,数学)
    HDU1214 圆桌会议(找规律,数学)
    HDU1215 七夕节(模拟 数学)
    HDU 1216 Assistance Required(暴力打表)
    HDU 1220 Cube(数学,找规律)
    HDU 1221 Rectangle and Circle(判断圆和矩形是不是相交)
  • 原文地址:https://www.cnblogs.com/danxun/p/11679132.html
Copyright © 2011-2022 走看看