mybatis學習筆記(6) ------ 緩存
緩存
緩存就是暫存數據的地方,mybatis提供緩存機制,將數據存儲在緩存中,下次查詢的時候,若緩存中存在需要的數據,就無需去數據庫中查找,可以提升性能。
一級緩存
在SqlSession中維護一個緩存,用來用來存放查找出來的數據,因此一級緩存只在同一個SqlSession對象中有效,不同的SqlSession都有屬於自己的HashMap,都有屬於自己的緩存。當調用commit方法之後,緩存會被清空。
演示
@Test
public void test8(){
SqlSession sqlSession = factory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User u1 = mapper.search(1);
System.out.println(u1);
System.out.println("=================");
//sqlSession.commit();
User u2 = mapper.search(1);
System.out.println(u2);
}
第一次會執行sql語句,第二次不會執行sql語句,直接從緩存中獲取。但當註釋解開之後,則第二次也會執行sql語句。
注: 當select元素中將flushCache設置爲true後,也會刷新緩存,這個值默認是false。
二級緩存
- 需要手動開啓緩存
<!--開啓二級緩存總開關,默認爲true-->
<setting name="cacheEnabled" value="true"/>
- 對應的映射文件中開啓緩存,在select標籤中開啓緩存
<cache/>
useCache="true" : 默認爲true,只與二級緩存有關
- 主配置文件中開啓二級緩存
多個SqlSession共用一個SqlSessionFactory
當sqlSession執行close方法,就會將查詢的內容存入二級緩存中,下一次不同的sqlSession可以直接去緩存中找數據,找不到再去數據庫中查。
每一次增刪改之後,都會刷新緩存,一二級緩存都會被刷新。