一级缓存:

MyBatis的一级缓存指的是在一个Session域内,session为关闭的时候执行的查询会根据SQL为key被缓存(跟mysql缓存一样,修改任何参数的值都会导致缓存失效)

  1. package cn.itcast.mybatis.dao;
  2.  
  3. import static org.junit.Assert.*;
  4.  
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.util.Date;
  8. import java.util.HashMap;
  9. import java.util.List;
  10.  
  11. import org.apache.ibatis.io.Resources;
  12. import org.apache.ibatis.session.SqlSession;
  13. import org.apache.ibatis.session.SqlSessionFactory;
  14. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  15. import org.junit.Before;
  16. import org.junit.Test;
  17.  
  18. import cn.itcast.mybatis.pojo.User;
  19.  
  20. public class UserDAOTest2 {
  21.  
  22. private static IUser userDAO = null;
  23.  
  24. private static SqlSession sqlSession = null;
  25.  
  26. @Before
  27. public void init() {
  28. try {
  29. // 构造SqlSessionFactory
  30. // 定义配置文件路径
  31. String resource = "mybatis-config.xml";
  32. // 读取配置文件
  33. InputStream inputStream = Resources.getResourceAsStream(resource);
  34. // 通过SqlSessionFactoryBuilder构建一个SqlSessionFactory
  35. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"test");
  36.  
  37. this.sqlSession = sqlSessionFactory.openSession(false);//设为false时,必须手动提交:sqlSession.commit();
  38. // this.sqlSession.close();
  39. this.userDAO = sqlSession.getMapper(IUser.class);
  40. } catch (IOException e) {
  41. e.printStackTrace();
  42. }
  43. }
  44.  
  45. static{
  46.  
  47. // 构造SqlSessionFactory
  48. // 定义配置文件路径
  49. String resource = "mybatis-config.xml";
  50. // 读取配置文件
  51. InputStream inputStream;
  52. try {
  53. inputStream = Resources.getResourceAsStream(resource);
  54. // 通过SqlSessionFactoryBuilder构建一个SqlSessionFactory
  55. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"test");
  56.  
  57. sqlSession = sqlSessionFactory.openSession(false);//设为false时,必须手动提交:sqlSession.commit();
  58. // this.sqlSession.close();//当关闭的时候,在下面的方法中都会报错
  59. userDAO = sqlSession.getMapper(IUser.class);
  60.  
  61. } catch (Exception e) {
  62. // TODO Auto-generated catch block
  63. e.printStackTrace();
  64. }
  65.  
  66. }
  67.  
  68. @Test
  69. public void testQueryUserByUserName() {
  70. User user = this.userDAO.queryUserByUserName("zhangsan");
  71. System.out.println(user);
  72. }
  73.  
  74. @Test
  75. public void testQueryByTabkeName() {
  76.  
  77. List <HashMap<String, Object>> list2= this.userDAO.queryByTabkeName("tb_order");
  78. for (HashMap<String, Object> hashMap : list2) {
  79. System.out.println(hashMap);
  80.  
  81. }
  82. }
  83.  
  84. @Test
  85. public void testQueryUserByUserNameAndPassword() {
  86. HashMap<String, Object> map = new HashMap<String, Object>();
  87. map.put("userName", "zhangsan");
  88. map.put("password", "123456");
  89. // User user = this.userDAO.queryUserByUserNameAndPassword(map);
  90. User user = this.userDAO.queryUserByUserNameAndPassword("zhangsan","123456");
  91. System.out.println(user);
  92. }
  93.  
  94. @Test
  95. public void testSaveUser() {
  96. User user = new User();
  97. user.setAge(20);
  98. user.setBirthday(new Date());
  99. user.setName("test_name_9");
  100. user.setPassword("123456");
  101. user.setSex(true);
  102. user.setUserName("test_username_9");
  103.  
  104. this.userDAO.saveUser(user);
  105.  
  106. System.out.println(user);
  107. // 提交
  108. this.sqlSession.commit();
  109. }
  110.  
  111. @Test
  112. public void testUpdateUser() {
  113. User user = new User();
  114. user.setAge(20);
  115. user.setBirthday(new Date());
  116. user.setName("test_name_1");
  117. user.setPassword("123qwe");
  118. user.setSex(true);
  119. user.setId(6L);
  120.  
  121. this.userDAO.updateUser(user);
  122. this.sqlSession.commit();
  123. }
  124.  
  125. @Test
  126. public void testDeleteUserById() {
  127. this.userDAO.deleteUserById(6L);
  128. }
  129.  
  130. }

二级缓存:

Mybatis的二级缓存的作用域是一个mapper的namespace,同一个namespace中查询sql可以从缓存中命中。

二级缓存是可以跨session的。

开启二级缓存:

在mapper.xml文件中加入 <cache /> 。

mybatis的缓存机制的更多相关文章

  1. mybatis的缓存机制及用例介绍

    在实际的项目开发中,通常对数据库的查询性能要求很高,而mybatis提供了查询缓存来缓存数据,从而达到提高查询性能的要求. mybatis的查询缓存分为一级缓存和二级缓存,一级缓存是SqlSessio ...

  2. 深入浅出mybatis之缓存机制

    目录 前言 准备工作 MyBatis默认缓存设置 缓存实现原理分析 参数localCacheScope控制的缓存策略 参数cacheEnabled控制的缓存策略 总结 前言 提到缓存,我们都会不约而同 ...

  3. MyBatis - 5.缓存机制

    MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制.缓存可以极大的提升查询效率. MyBatis系统中默认定义了两级缓存. 一级缓存和二级缓存. 1.默认情况下,只有一级缓存( ...

  4. MyBatis 的缓存机制

    缓存机制可以减轻数据库的压力,原理是在第一查询时,将查询结果缓存起来,之后再查询同样的sql, 不是真的去查询数据库,而是直接返回缓存中的结果. 缓存可以降低数据库的压力,但同时可能无法得到最新的结果 ...

  5. MyBatis框架——缓存机制

    使⽤缓存机制的作⽤也是减少 Java 应⽤程序与数据库的交互次数,从⽽提升程序的运⾏效率. ⽐如第 ⼀次查询出某个对象之后,MyBatis 会⾃动将其存⼊缓存,当下⼀次查询同⼀个对象时,就可以直接从 ...

  6. mybatis(四)缓存机制

    转载:https://www.cnblogs.com/wuzhenzhao/p/11103043.html 缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力.跟Hibe ...

  7. mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache

    1.1  什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造 s ...

  8. mybatis缓存机制

    目录 mybatis缓存机制 Executor和缓存 一级缓存 小结 二级缓存 小结 mybatis缓存机制 mybatis支持一.二级缓存来提高查询效率,能够正确的使用缓存的前提是熟悉mybatis ...

  9. 聊聊MyBatis缓存机制【美团-推荐】

    聊聊MyBatis缓存机制 2018年01月19日 作者: 凯伦 文章链接 18778字 38分钟阅读 前言 MyBatis是常见的Java数据库访问层框架.在日常工作中,开发人员多数情况下是使用My ...

随机推荐

  1. zookeeper集群的安装

    顾名思义zookeeper就是动物园管理员,他是用来管hadoop(大象).Hive(蜜蜂).pig(小猪)的管理员, Apache Hbase和 Apache Solr 的分布式集群都用到了zook ...

  2. [转]链接分析算法之:主题敏感PageRank

    原文引自:http://blog.csdn.net/hguisu/article/details/8005192,感谢 前面的讨论提到.PageRank忽略了主题相关性,导致结果的相关性和主题性降低, ...

  3. [转]javascript函数定义表达式和函数声明的区别

    在javascript中,函数有两种定义写法,函数定义表达式和函数声明,其例子分别如下所示: var test = function(x){ return x; } function test(x){ ...

  4. impdp/expdp 总结

      impdp/expdp   1.创建DIRECTORY create directory dir_dp as '/tmp';   --建议将DIRECTORY 建在 /tmp 表下面,该目录肯定存 ...

  5. MySql中的变量定义(转)

    根据mysql手册,mysql的变量分为两种:系统变量和用户变量.但是在实际使用中,还会遇到诸如局部变量.会话变量等概念.根据个人感觉,mysql变量大体可以分为四种类型: 一.局部变量. 局部变量一 ...

  6. 获取元素位置信息:getBoundingClientRect

    一个神奇的方法. 一.历史 偷个懒,上个传送门:http://www.cnblogs.com/2050/archive/2012/02/01/2335211.html 二.介绍 DOM元素方法,返回一 ...

  7. php 产生不重复的随机数

    $arr=array();//创建数组 while(count($arr)<10){ $a = mt_rand(1000,9999);//产生随机数 if(!in_array($a,$arr)) ...

  8. Python学习笔记七-错误和异常

    程序员总是和各种错误打交道,学习如何识别并正确的处理程序错误是很有必要的. 7.1错误和异常 1.错误 从软件方面来看,错误分为语法错误和逻辑错误两种.这两种错误都将导致程序无法正常进行下去,当Pyt ...

  9. iOS开发——C篇&动态内存分析

    再C语言中关于内存是一个很重要的知识点,所以今天我就从c语言的内存分配开始为大家解析一下C语言再iOS开发中非常重要的一些知识. 1:malloc函数的介绍 C语言中开辟内存空间:malloc函数(堆 ...

  10. TTS异步+同步

    微软TTS使用说明 一.SAPI SDK的介绍 SAPI,全称是The Microsoft Speech API.就是微软的语音API.由Windows Speech SDK提供. Windows S ...