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。其次,第二次取到的數據是從緩存中得到的,一樣獲取的是兩個不一樣的對象。

 

相關文章
相關標籤/搜索