zoukankan      html  css  js  c++  java
  • mybatis的一级缓存与二级缓存

    一级缓存  

            Mybatis一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。当一个sqlSession结束后该sqlSession中的一级缓存也就不存在了。Mybatis默认开启一级缓存。

    简单说

             session级别的缓存

       当用户对同一个session进行多次查询的时候,只会查询一次数据库

       后面的查询直接返回缓存的数据

       当提交事务结束session会把一级缓存中的数据清除

    二级缓存

              Mybatis二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。Mybatis默认没有开启二级缓存需要在setting全局参数中配置开启二级缓存。

       工作原理就是当开启了二级缓存mybatis会把一级缓存的数据序列化至磁盘中

       当开始一个新的session再次查询时会尝试从二级缓存中查询是否有数据,

       有就直接返回缓存中的数据。

     

    开启二级缓存

       在MyBatis的配置文件启动

     在需要开启二级缓存的表映射文件中增加 cache标签

      

      使用二级缓存的实体类实现Serializable接口

     

  • 相关阅读:
    android使用ant编译打包
    Android OpenGL ES 2.0 (二) 画立方体
    Android OpenGL ES 2.0 (三) 灯光pervertex lighting
    OpenGL ES2.0里的3种变量
    JAVA对DOM的一些解析、修改、新增操作
    webservice(二)示例代码
    linux改IP
    android从未安装的apk文件里获取信息(包信息,资源信息)
    Android OpenGL ES 2.0 (一) 画三角形
    一个关于closure的问题.
  • 原文地址:https://www.cnblogs.com/lin02/p/11469405.html
Copyright © 2011-2022 走看看