mybatis的缓存机制
一级缓存:
MyBatis的一级缓存指的是在一个Session域内,session为关闭的时候执行的查询会根据SQL为key被缓存(跟mysql缓存一样,修改任何参数的值都会导致缓存失效)
- package cn.itcast.mybatis.dao;
- import static org.junit.Assert.*;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
- import org.junit.Before;
- import org.junit.Test;
- import cn.itcast.mybatis.pojo.User;
- public class UserDAOTest2 {
- private static IUser userDAO = null;
- private static SqlSession sqlSession = null;
- @Before
- public void init() {
- try {
- // 构造SqlSessionFactory
- // 定义配置文件路径
- String resource = "mybatis-config.xml";
- // 读取配置文件
- InputStream inputStream = Resources.getResourceAsStream(resource);
- // 通过SqlSessionFactoryBuilder构建一个SqlSessionFactory
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"test");
- this.sqlSession = sqlSessionFactory.openSession(false);//设为false时,必须手动提交:sqlSession.commit();
- // this.sqlSession.close();
- this.userDAO = sqlSession.getMapper(IUser.class);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- static{
- // 构造SqlSessionFactory
- // 定义配置文件路径
- String resource = "mybatis-config.xml";
- // 读取配置文件
- InputStream inputStream;
- try {
- inputStream = Resources.getResourceAsStream(resource);
- // 通过SqlSessionFactoryBuilder构建一个SqlSessionFactory
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"test");
- sqlSession = sqlSessionFactory.openSession(false);//设为false时,必须手动提交:sqlSession.commit();
- // this.sqlSession.close();//当关闭的时候,在下面的方法中都会报错
- userDAO = sqlSession.getMapper(IUser.class);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- @Test
- public void testQueryUserByUserName() {
- User user = this.userDAO.queryUserByUserName("zhangsan");
- System.out.println(user);
- }
- @Test
- public void testQueryByTabkeName() {
- List <HashMap<String, Object>> list2= this.userDAO.queryByTabkeName("tb_order");
- for (HashMap<String, Object> hashMap : list2) {
- System.out.println(hashMap);
- }
- }
- @Test
- public void testQueryUserByUserNameAndPassword() {
- HashMap<String, Object> map = new HashMap<String, Object>();
- map.put("userName", "zhangsan");
- map.put("password", "123456");
- // User user = this.userDAO.queryUserByUserNameAndPassword(map);
- User user = this.userDAO.queryUserByUserNameAndPassword("zhangsan","123456");
- System.out.println(user);
- }
- @Test
- public void testSaveUser() {
- User user = new User();
- user.setAge(20);
- user.setBirthday(new Date());
- user.setName("test_name_9");
- user.setPassword("123456");
- user.setSex(true);
- user.setUserName("test_username_9");
- this.userDAO.saveUser(user);
- System.out.println(user);
- // 提交
- this.sqlSession.commit();
- }
- @Test
- public void testUpdateUser() {
- User user = new User();
- user.setAge(20);
- user.setBirthday(new Date());
- user.setName("test_name_1");
- user.setPassword("123qwe");
- user.setSex(true);
- user.setId(6L);
- this.userDAO.updateUser(user);
- this.sqlSession.commit();
- }
- @Test
- public void testDeleteUserById() {
- this.userDAO.deleteUserById(6L);
- }
- }
二级缓存:
Mybatis的二级缓存的作用域是一个mapper的namespace,同一个namespace中查询sql可以从缓存中命中。
二级缓存是可以跨session的。
开启二级缓存:
在mapper.xml文件中加入 <cache /> 。
mybatis的缓存机制的更多相关文章
- mybatis的缓存机制及用例介绍
在实际的项目开发中,通常对数据库的查询性能要求很高,而mybatis提供了查询缓存来缓存数据,从而达到提高查询性能的要求. mybatis的查询缓存分为一级缓存和二级缓存,一级缓存是SqlSessio ...
- 深入浅出mybatis之缓存机制
目录 前言 准备工作 MyBatis默认缓存设置 缓存实现原理分析 参数localCacheScope控制的缓存策略 参数cacheEnabled控制的缓存策略 总结 前言 提到缓存,我们都会不约而同 ...
- MyBatis - 5.缓存机制
MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制.缓存可以极大的提升查询效率. MyBatis系统中默认定义了两级缓存. 一级缓存和二级缓存. 1.默认情况下,只有一级缓存( ...
- MyBatis 的缓存机制
缓存机制可以减轻数据库的压力,原理是在第一查询时,将查询结果缓存起来,之后再查询同样的sql, 不是真的去查询数据库,而是直接返回缓存中的结果. 缓存可以降低数据库的压力,但同时可能无法得到最新的结果 ...
- MyBatis框架——缓存机制
使⽤缓存机制的作⽤也是减少 Java 应⽤程序与数据库的交互次数,从⽽提升程序的运⾏效率. ⽐如第 ⼀次查询出某个对象之后,MyBatis 会⾃动将其存⼊缓存,当下⼀次查询同⼀个对象时,就可以直接从 ...
- mybatis(四)缓存机制
转载:https://www.cnblogs.com/wuzhenzhao/p/11103043.html 缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力.跟Hibe ...
- mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache
1.1 什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造 s ...
- mybatis缓存机制
目录 mybatis缓存机制 Executor和缓存 一级缓存 小结 二级缓存 小结 mybatis缓存机制 mybatis支持一.二级缓存来提高查询效率,能够正确的使用缓存的前提是熟悉mybatis ...
- 聊聊MyBatis缓存机制【美团-推荐】
聊聊MyBatis缓存机制 2018年01月19日 作者: 凯伦 文章链接 18778字 38分钟阅读 前言 MyBatis是常见的Java数据库访问层框架.在日常工作中,开发人员多数情况下是使用My ...
随机推荐
- zookeeper集群的安装
顾名思义zookeeper就是动物园管理员,他是用来管hadoop(大象).Hive(蜜蜂).pig(小猪)的管理员, Apache Hbase和 Apache Solr 的分布式集群都用到了zook ...
- [转]链接分析算法之:主题敏感PageRank
原文引自:http://blog.csdn.net/hguisu/article/details/8005192,感谢 前面的讨论提到.PageRank忽略了主题相关性,导致结果的相关性和主题性降低, ...
- [转]javascript函数定义表达式和函数声明的区别
在javascript中,函数有两种定义写法,函数定义表达式和函数声明,其例子分别如下所示: var test = function(x){ return x; } function test(x){ ...
- impdp/expdp 总结
impdp/expdp 1.创建DIRECTORY create directory dir_dp as '/tmp'; --建议将DIRECTORY 建在 /tmp 表下面,该目录肯定存 ...
- MySql中的变量定义(转)
根据mysql手册,mysql的变量分为两种:系统变量和用户变量.但是在实际使用中,还会遇到诸如局部变量.会话变量等概念.根据个人感觉,mysql变量大体可以分为四种类型: 一.局部变量. 局部变量一 ...
- 获取元素位置信息:getBoundingClientRect
一个神奇的方法. 一.历史 偷个懒,上个传送门:http://www.cnblogs.com/2050/archive/2012/02/01/2335211.html 二.介绍 DOM元素方法,返回一 ...
- php 产生不重复的随机数
$arr=array();//创建数组 while(count($arr)<10){ $a = mt_rand(1000,9999);//产生随机数 if(!in_array($a,$arr)) ...
- Python学习笔记七-错误和异常
程序员总是和各种错误打交道,学习如何识别并正确的处理程序错误是很有必要的. 7.1错误和异常 1.错误 从软件方面来看,错误分为语法错误和逻辑错误两种.这两种错误都将导致程序无法正常进行下去,当Pyt ...
- iOS开发——C篇&动态内存分析
再C语言中关于内存是一个很重要的知识点,所以今天我就从c语言的内存分配开始为大家解析一下C语言再iOS开发中非常重要的一些知识. 1:malloc函数的介绍 C语言中开辟内存空间:malloc函数(堆 ...
- TTS异步+同步
微软TTS使用说明 一.SAPI SDK的介绍 SAPI,全称是The Microsoft Speech API.就是微软的语音API.由Windows Speech SDK提供. Windows S ...