SSM(五)Mybatis配置缓存

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

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

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

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

若是SqlSession进行了提交,那么一级缓存将会清除。app

 1 public void test(){
 2         SqlSession session = MyBatisUtil.getSession();
 3         IUserDAO mapper = session.getMapper(IUserDAO.class);
 4         UserOneToMany user = new UserOneToMany();
 5         user.setUsercode("zhangsan");
 6         UserOneToMany userOneToMany = mapper.getUserOneToManyBills(user);
 7         System.out.println("======"+userOneToMany);
 8         session.commit();
 9         UserOneToMany userOneToMany2 = mapper.getUserOneToManyBills(user);
10         System.out.println("======"+userOneToMany2);
11         session.close();
12     }

打印结果不一样,且发送了两次SQL,得到了两个不一样的对象:测试

 

 

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

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

 

这里<cache/>节点能够设置得更详细些,好比:对象

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

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

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

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

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

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

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

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

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

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

 

相关文章
相关标签/搜索