mybatis 自定义缓存 cache
缓存不管哪个框架都是显得特别的重要,今天自己测试实现了mybatis自定义缓存,从而理解mybatis缓存的工作原理。
首先缓存类要实现Cache接口:具体实现如下package com.ibatis.blog;
package com.ibatis.cache;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.apache.ibatis.cache.Cache;
public class MyCache implements Cache
{
private ReadWriteLock lock = new ReentrantReadWriteLock();
private ConcurrentHashMap<Object, Object> cache = new ConcurrentHashMap<Object, Object>();
private String id;
public MyCache()
{
}
/ /这个构造方法必须有
public MyCache(String id)
{
this.id = id;
}
public void clear()
{
cache.clear();
}
public String getId()
{
System.out.println("getId-->" + id);
return id;
}
public Object getObject(Object key)
{
System.out.println("getObject---key:" + key);
return cache.get(key);
}
public ReadWriteLock getReadWriteLock()
{
// System.out.println("getReadWriteLock");
return lock;
}
public synchronized int getSize()
{
System.out.println("getsize");
return cache.size();
}
public void putObject(Object key, Object value)
{
// System.out.println("putObject--key:" + key);
// System.out.println("putObject--value:" + value);
cache.put(key, value);
}
public Object removeObject(Object key)
{
System.out.println("remove:" + key);
return cache.remove(key);
}
}
需要在配置文件中添加:
<cache type="com.ibatis.cache.MyCache"></cache>
进行测试:进行两次相同的查询:
@Test
public void testSelectAll()
{
List<Article> result = service.findAll(null);
for (Article a : result)
{
System.out.println(a);
}
System.out.println("-----------");
List<Article> result1 = service.findAll(null);
for (Article a : result1)
{
System.out.println(a);
}
}
产生的结果如下:
getId-->article
getObject---key:-395398842:3059602323:article.article_selectAll:0:2147483647:select * from
article
getObject---key:-1263983414:-596172894:article.selectUser:0:2147483647:select * from user
where
id=?:1
getObject---key:-1263983414:-596172894:article.selectUser:0:2147483647:select * from user
where
id=?:1
Article [id=1, name=firstArticle, time=2013-11-3 0:00:00, user=User [article=null, id=1, name=d, sex=1]]
Article [id=2, name=secondArticle, time=2013-11-3 0:00:00, user=User [article=null, id=1, name=d, sex=1]]
-----------
getObject---key:-395398842:3059602323:article.article_selectAll:0:2147483647:select * from
article
Article [id=1, name=firstArticle, time=2013-11-3 0:00:00, user=User [article=null, id=1, name=d, sex=1]]
Article [id=2, name=secondArticle, time=2013-11-3 0:00:00, user=User [article=null, id=1, name=d, sex=1]]
缓存设置成功,第二次查询的时候直接从缓存中查询了!
mybatis 自定义缓存 cache的更多相关文章
- 【MyBatis源码解析】MyBatis一二级缓存
MyBatis缓存 我们知道,频繁的数据库操作是非常耗费性能的(主要是因为对于DB而言,数据是持久化在磁盘中的,因此查询操作需要通过IO,IO操作速度相比内存操作速度慢了好几个量级),尤其是对于一些相 ...
- mybatis学习--缓存(一级和二级缓存)
声明:学习摘要! MyBatis缓存 我们知道,频繁的数据库操作是非常耗费性能的(主要是因为对于DB而言,数据是持久化在磁盘中的,因此查询操作需要通过IO,IO操作速度相比内存操作速度慢了好几个量级) ...
- MyBatis 一、二级缓存和自定义缓存
1.一级缓存 MyBatis 默认开启了一级缓存,一级缓存是在SqlSession 层面进行缓存的.即,同一个SqlSession ,多次调用同一个Mapper和同一个方法的同一个参数,只会进行一 ...
- Mybatis自定义分布式二级缓存实现与遇到的一些问题解决方案!
先说两句: 我们都知道Mybatis缓存分两类: 一级缓存(同一个Session会话内) & 二级缓存(基于HashMap实现的以 namespace为范围的缓存) 今天呢, 我们不谈一级缓存 ...
- redis学习总结-redis作为MyBatis的自定义缓存
1.RedisCache.java package com.houtai.cache; import java.util.concurrent.locks.ReadWriteLock; import ...
- (转)MyBatis 一、二级缓存和自定义缓存
1.一级缓存 MyBatis 默认开启了一级缓存,一级缓存是在SqlSession 层面进行缓存的.即,同一个SqlSession ,多次调用同一个Mapper和同一个方法的同一个参数, 只会进行一次 ...
- MyBatis功能点一:二级缓存cache
对于Mybatis缓存分作用域等维度区别一.二级缓存特点如下图: 分析缓存源码首先得找到缓存操作的入口:前面已经分析,sqlsesion.close()仅对一级缓存有影响,而update等对一/二级缓 ...
- mybatis 3.x 缓存Cache的使用
mybatis 3.x 已经支持cache功能了,使用很简单,在mappper的xml文件里添加以下节点: <mapper namespace="com.cnblogs.yjmyzz. ...
- mybatis 缓存(cache)的使用
许多应用程序,为了提高性能而增加缓存, 特别是从数据库中获取的数据. 在默认情况下,mybatis 的一级缓存是默认开启的.类似于hibernate, 所谓一级缓存,也就是基于同一个sqlsessio ...
随机推荐
- Python Flask构建微信小程序订餐系统 学习 资源
一.Flask MVC框架结构 1.1实际项目结构 1.2application.py 项目配置文件Flask之flask-script模块使用 static.py 文件(部署到生成环境不需 ...
- 高德地图首席科学家任小枫QA答疑汇总丨视觉+地图技术有哪些新玩法?
上周,阿里巴巴高德地图首席科学家任小枫在#大咖学长云对话#的在线直播活动上就计算机视觉相关技术发展以及在地图出行领域的应用与大家做技术交流,直播间互动火爆,尤其在QA环节,学弟学妹们纷纷就感兴趣的视觉 ...
- linux--配置开发环境 --Nginx篇
安装: 安装好了话,我们的nginx的目录在: /etc/nginx 启动: sudo service nginx start 然后访问我们的页面就可以看到了我们的界面 然后我们配置我们的域名: 我 ...
- diskpart 分区,挂载,和移除
list disk select disk 1 clean Create partition primary size=102400 active format quick list volume a ...
- 用百度AI平台接口实现OCR文字识别
目录 一.接入指南 1.注册 2.登录 3.创建应用 二.安装接口模型 三.编写python代码 四.识别结果 一.接入指南 若想利用百度AI开放平台进行软件开发,首先应成为百度AI开放平台的开发者. ...
- js高阶函数的理解
高阶函数:英文叫Higher-order function.JavaScript的函数其实都指向某个变量.既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数 ...
- Angular 7开发环境配置
目录 前言 一.搭建项目 1.安装Angular CLI 2.创建项目 3.集成Element Angular 二.设置路由 1.创建路由模块 2.导入.导出RouterModule类 3 ...
- 【用AI开挂的人生】5岁学编程,12岁进IBM
" 跟普通孩子比起来,14岁少年Tanmay Bakshi身上有无数光环: 5岁开始对计算机感兴趣 9岁发布了第1个iOSAPP 12岁成为IBM沃森最年轻的程序员 现任IBM Watson ...
- python(安装)
1.下载安装包 https://www.python.org/downloads/ 2.安装 默认安装路径:C:\python3(建议自定义安装路径) 3.配置环境变量 [右键计算机]-->[属 ...
- python selenium(定位方法)
一.定位方法 注意:元素属性必须唯一存在 #id定位 find_element_by_id() #name定位 find_element_by_name() #class_name定位 find_el ...