SSM(五)Mybatis配置緩存
阿新 • • 發佈:2017-10-15
兩個 取數 println mage 進行 hint lose alt 緩存
1.在沒有配置的情況下,mybatis默認開啟一級緩存。
1 Object object=mapper.getXxx(object); 2 Object object2=mapper.getXxx(object);
打個斷點測試一下就知道了。
在同一個SqlSession中,第一次查詢後,調用mapper相同方法,SqlSession會從一級緩存中取數據,而且得到的是相同的對象。不會發送SQL。
如果SqlSession進行了提交,那麽一級緩存將會清除。
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"/>
第二步:命名空間加入節點:<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。其次,第二次取到的數據是從緩存中獲得的,同樣獲取的是兩個不同的對象。
SSM(五)Mybatis配置緩存