1.在没有配置的情况下,mybatis默认开启一级缓存。

 Object object=mapper.getXxx(object);
Object object2=mapper.getXxx(object);

打个断点测试一下就知道了。

在同一个SqlSession中,第一次查询后,调用mapper相同方法,SqlSession会从一级缓存中取数据,而且得到的是相同的对象。不会发送SQL。

如果SqlSession进行了提交,那么一级缓存将会清除。

 public void test(){
SqlSession session = MyBatisUtil.getSession();
IUserDAO mapper = session.getMapper(IUserDAO.class);
UserOneToMany user = new UserOneToMany();
user.setUsercode("zhangsan");
UserOneToMany userOneToMany = mapper.getUserOneToManyBills(user);
System.out.println("======"+userOneToMany);
session.commit();
UserOneToMany userOneToMany2 = mapper.getUserOneToManyBills(user);
System.out.println("======"+userOneToMany2);
session.close();
}

打印结果不同,且发送了两次SQL,获得了两个不同的对象:

2.MyBatis开启二级缓存第一步:大配置中settings节点加入:<setting name="cacheEnabled" value="true"/>

第二步:命名空间加入节点:<cache/>

这里<cache/>节点可以设置得更详细些,比如:

<cache eviction="LRU" flushInterval="100000" size="1024" readOnly="true"/>

其中eviction代表回收策略(LRU|FIFO|SOFT|WEAK);flushInterval代表刷新间隔时间,单位是毫秒;size是引用数目,就是缓存中可以存放多少个对象;readOnly只读,缓存只能读取不能修改。

简单说明下四个回收策略:

1.LRU(默认):最近最少使用,移除最长时间不用的对象。

2.FIFO:先进先出,按对象进入缓存的顺序移除它们。

3.SOFT:软引用,移除基于垃圾回收器状态和软引用规则的对象。

4.WEAK:弱引用,移除基于垃圾回收器状态和弱引用规则的对象。

第三步:相应实体类实现Serializable接口

测试方法不变,观察结果:

首先,程序只发送了一次SQL。其次,第二次取到的数据是从缓存中获得的,同样获取的是两个不同的对象。

最新文章

  1. 解决 LINUX mysql不能通过IP连接 只能localhost 权限没问题情况下
  2. javascript - 简单实现一个图片延迟加载的jQuery插件
  3. FastDFS分布式文件系统安装与使用(单节点)
  4. Android:控件GridView的使用
  5. MySQL运行原理与基础架构
  6. Spark性能调优之代码方面的优化
  7. 牛客网Wannafly挑战赛25A 因子(数论 素因子分解)
  8. typescript里面调用javasript
  9. ls操作总结
  10. FXAA,FSAA与MSAA有什么区别?效果和性能上哪个好
  11. rest-framework 序列化格式Restful API设计规范
  12. 5、lvs使用进阶(01)
  13. redis初使用
  14. struts系列:校验(三)国际化
  15. JAVA基础知识要点
  16. 【HTTP header】【Access-Control-Allow-Credentials】跨域Ajax请求时是否带Cookie的设置
  17. NPOI创建Excel批注
  18. Github基本操作的学习与温习
  19. 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(三):设置上传文件夹权限(这里测试用完全共享)
  20. vue实现结账单基本方法

热门文章

  1. android4.4系统解决“ERRORcouldn&amp;#39;t find native method”方法
  2. Openstack+Kubernetes+Docker微服务
  3. WPF 3D 模型旋转
  4. VC中引用第三方库,常见的库冲突问题
  5. ASP.NET Core 中间件 - ASP.NET Core 基础教程 - 简单教程,简单编程
  6. JQuery在一个简单的表单验证的例子
  7. jquery模拟飞秋
  8. C++成员函数指针错误用法警示(成员函数指针与高性能的C++委托,三篇),附好多评论
  9. C#调用Microsoft.DirectX.DirectSound.dll时出错
  10. [Game-0001] 新手引导逻辑梳理