深化了解Mybatis二級緩存。本站提示廣大學習愛好者:(深化了解Mybatis二級緩存)文章只能為提供參考,不一定能成為您想要的結果。以下是深化了解Mybatis二級緩存正文
上篇文章給大家引見了mybatis一級緩存,有需求的冤家可以參考下。
與一級緩存相比,二級緩存范圍更大了一些,可以被多個SqlSession所共用。
異樣是發送異樣的查詢sql會先去緩存中找,找不到再去查詢數據庫。
每個namespace的mapper都會有自己的一個緩存的空間。
假如兩個mapper的namespace相反,執行mapper查詢到的數據將存儲到相反的二級緩存.
異樣假如有sqlSession執行了commit 會清空二級緩存.
配置文件(不必配置也是默許開啟的):
在sqlMapConfig.xml中:
<setting name="cacheEnabled" value="true"/>
在相應的mapper.xml中:
<cache/>
假如不需求二級緩存,可以在設置禁用二級緩存
<select useCache="false"></select>
這樣每次都是從數據庫中讀取
在執行insert,update,delete後會刷新緩存(清空緩存),可以設置不刷新
普通不予設置,設置能夠會招致髒讀.
<insert flushCache="false"></insert>
小例子:
SqlSession session1 = factory.openSession(); SqlSession session2 = factory.openSession(); SqlSession session3 = factory.openSession(); UserMapper mapper1 = session1.getMapper(UserMapper.class); UserMapper mapper2 = session2.getMapper(UserMapper.class); UserMapper mapper3 = session3.getMapper(UserMapper.class); //第一次懇求,查詢id為1的用戶 User user1 = mapper1.findUserById(1); System.out.println(user1); //close 將數據寫入二級緩存 session1.close(); //清空二級緩存,UserMapper下的 user1.setUsername("mmm"); mapper3.updateUser(user1); session3.commit(); //第二次查詢會從緩存中找 User user2 = mapper2.findUserById(1); System.out.println(user2); session2.close();
留意此處要停止二級緩存的對象必需完成Serilizable接口,由於這些緩存數據能夠會反序列化寫到硬盤或許其他中央。
以上所述是給大家引見的Mybatis二級緩存,希望對大家有所協助,假如大家有任何疑問請給我留言,會及時回復大家的。在此也十分感激大家對網站的支持!