Mybatis中的缓存

什么是缓存

存在于内存中的临时数据。

为什么使用缓存

减少和数据库的交互次数,提高执行效率。

什么样的数据能使用缓存,什么样的数据不能使用

  • 适用于缓存:

    1. 经常查询并且不经常改变的。
    2. 数据的正确与否对最终结果影响不大的。
  • 不适用于缓存:
    1. 经常经常改变的数据。
    2. 数据的正确与否对最终结果影响很大的。
    3. 例如:商品的库存,银行的汇率,股市的牌价。

Mybatis中的一级缓存和二级缓存

  • 一级缓存:

    1. 它指的是Mybatis中SqlSession对象的缓存。
    2. 当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供一块区域中。
    3. 该区域的结构是一个Map。当我们再次查询同样的数据,mybatis会先去sqlsession中,查询是否有,有的话直接拿出来用。
    4. 当SqlSession对象消失时,mybatis的一级缓存也就消失了。
  • 二级缓存:
    1. 它指的是Mybatis中SqlSessionFactory对象的缓存。
    2. 由同一个SqlSessionFactory对象创建的SqlSession共享其缓存。
    3. 二级缓存的使用步骤:
      1. 让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)
      2. 让当前的映射文件支持二级缓存(在IUserDao.xml中配置)
      3. 让当前的操作支持二级缓存(在select标签中配置)

缓存示例

`
/** * 测试一级缓存 */
@Test
public void TestAll()
{User user = iUserDao.findById(42);    System.out.println(user);    User user1 = iUserDao.findById(42);    System.out.println(user1);
}
输出结果
com.itheima.domain.User@4d02f94e
com.itheima.domain.User@4d02f94e/**
* 测试一级缓存
*/
@Test
public void TestAll()
{    User user = iUserDao.findById(42);    System.out.println(user);    sqlSession.close();    sqlSession= MyBaitsUtil.getSession();    iUserDao= sqlSession.getMapper(IUserDao.class);    User user1 = iUserDao.findById(42);    System.out.println(user1);
}输出结果
com.itheima.domain.User@4d02f94e
com.itheima.domain.User@1e683a3e/** * 测试二级缓存 */
全局配置<settings><setting name="cacheEnabled" value="true"/></settings>相应的xml配置<cache/><!-- 查询所有 --><select id="findAll" resultType="user" useCache="true">    select * from user u</select>@Test
public void TestAll()
{    SqlSession sqlSession1 = MyBaitsUtil.getSession();    IUserDao dao1= sqlSession1.getMapper(IUserDao.class);    User user = dao1.findById(42);    System.out.println(user);      sqlSession1.close();//一级缓存消失    SqlSession sqlSession2 = MyBaitsUtil.getSession();    IUserDao dao2= sqlSession2.getMapper(IUserDao.class);    User user1 = dao2.findById(42);    System.out.println(user1);
}输出结果
2019-07-17 10:27:28,023 612    [main] DEBUG ansaction.jdbc.JdbcTransaction  - Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@55536d9e]
2019-07-17 10:27:28,029 618    [main] DEBUG .itheima.dao.IUserDao.findById  - ==>  Preparing: select * from user where id = ?
2019-07-17 10:27:28,085 674    [main] DEBUG .itheima.dao.IUserDao.findById  - ==> Parameters: 42(Integer)
2019-07-17 10:27:28,120 709    [main] DEBUG .itheima.dao.IUserDao.findById  - <==      Total: 1
com.itheima.domain.User@fba92d3
2019-07-17 10:27:28,132 721    [main] DEBUG ansaction.jdbc.JdbcTransaction  - Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@55536d9e]
2019-07-17 10:27:28,132 721    [main] DEBUG ansaction.jdbc.JdbcTransaction  - Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@55536d9e]
2019-07-17 10:27:28,132 721    [main] DEBUG source.pooled.PooledDataSource  - Returned connection 1431530910 to pool.
2019-07-17 10:27:28,136 725    [main] DEBUG       com.itheima.dao.IUserDao  - Cache Hit Ratio [com.itheima.dao.IUserDao]: 0.5
com.itheima.domain.User@2b91004a
`

转载于:https://www.cnblogs.com/yangweiguo123/p/11199425.html

Mybatis中的缓存相关推荐

  1. 【学习笔记】mybatis中的缓存介绍和使用

    文章目录 介绍 一级缓存和二级缓存 让一级缓存失效的方法 二级缓存的使用 清空或者跳过二级缓存的3种方式 介绍 什么是缓存? 缓存就是存储数据的一个地方(称作:Cache),当程序要读取数据时,会首先 ...

  2. Mybatis中的缓存详解

    本文来说下Mybatis中的缓存 文章目录 Mybatis是什么 Mybatis的一级缓存 Mybatis的二级缓存 本文小结 Mybatis是什么 Mybatis是一个半自动 ORM(对象关系映射) ...

  3. 【MyBatis笔记12】MyBatis中二级缓存相关配置内容

    这篇文章,主要介绍MyBatis中二级缓存相关配置信息. 目录 一.MyBatis二级缓存 1.1.cache标签相关属性 (1)eviction属性 (2)size属性 (3)flushIntern ...

  4. Mybatis 中的缓存处理

    Mybatis是当今互联网时代下最受欢迎的ORM框架之一.相比与传统的hibernate,Mybatis更轻量也更加灵活.通过配置sql语句的方式,也能够在项目后期优化上更容易下手. 我们都知道,数据 ...

  5. MyBatis中一级缓存和二级缓存详解

    缓存的作用 首先缓存的合理使用是优化中最常见的,将从数据库中查询出来的数据放入缓存中,下次使用时不必从数据库查询,而是直接从缓存中读取,避免频繁操作数据库,减轻数据的压力,同时提高系统性能. 为什么需 ...

  6. mybatis中一级缓存和二级缓存

    1.一级缓存 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造 sqlSession对象,在对象中有一个(内存区域)数据结构(HashMap)用于存储缓存数据.不同的sqlSessio ...

  7. 【MyBatis学习13】MyBatis中的二级缓存

    1. 二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的.为了更加 ...

  8. Mybatis 中的一级缓存与二级缓存

    一,Mybatis中为什么要有缓存   缓存的意义是将用户经常查询的数据放入缓存(内存)中去,用户去查询数据的时候就不需要从磁盘(关系型数据库)中查询,直接从缓存中查询,从而提高了查询效率,解决了高并 ...

  9. MyBatis中的二级缓存

    MyBatis中的二级缓存 1. 二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二 ...

最新文章

  1. 【深度学习】深度学习在视觉搜索和匹配中的应用
  2. 用友老是显示服务器错误,客户端连服务器出现这样的错误框
  3. [Java基础]HashSet集合概述和特点
  4. Unity MVC框架 StrangeIoC
  5. 荣耀50样张公布:直出1亿像素 实际效果更出色
  6. iOS开发中的单元测试(三)——URLManager中的测试用例解析
  7. Teamcenter 开发中的一些问题
  8. www请求用到的Unescape
  9. category is in invalid format hint微信第三方平台将第三方提交的代码包提交审核出错...
  10. HTML:HTML界面实现HTML代码编译运行界面
  11. c语言24小时计时法转换为12小时,12时24时换算题(24小时和12小时换算方法)
  12. 【华为认证考试扫盲】超详细的华为认证入门基础知识,考证必看。
  13. STM32——FLASH闪存编程原理与步骤
  14. 2.4G无线收发器SI24R1低成本替代CI24R1
  15. 主板jrgb是什么_问答:现在的PC主机中有哪些配件支持RGB灯效?
  16. GBIT51129-2015工业化建筑评价标准
  17. 特征选择:python lime
  18. x程序 Linux,使用XCB编写X Window程序(01):快速起步
  19. Devcpp、Codeblocks如何设置支持c++11
  20. 解决 IE下ajaxfileupload不兼容的问题

热门文章

  1. SQLite中不支持的sql语法
  2. centos 的关机命令
  3. 艾伟:重提URL Rewrite(3):在URL Rewrite后保持PostBack地址
  4. 使用svnsync备份详解[转载+修改]
  5. PowerPoint中的LinkFormat对象
  6. myeclipse如何修改tomcat的timeout
  7. Android异步处理二:AsynTask介绍和使用AsyncTask异步更新UI界面
  8. 实例讲解UML建模分析与设计
  9. 计算机网络中各层的协议图表(TCP/IP)
  10. 指针变量p与“零值”进行比较的if 语句怎么写?