客戶端向數據庫服務器發送同樣的sql查詢語句,如果每次都去訪問數據庫,會導致性能的降低。
那么怎么提高呢?
mybatis為我們提供了一級緩存的策略
在一個sqlSession開啟和關閉之間,sqlSession對象內部(其實是Executor)會維護一個緩存的對象,當查詢數據時候,先從緩存中尋找是否存在該條數據,存在就直接取出來,不存在,向數據庫發送sql查詢, 然后將查詢后的數據存入緩存,和返回給程序。
這樣會存在一個問題:
如果在第一次和第二次查詢期間,有程序更改了要查訊的數據庫的數據,就會引起讀取的數據是錯誤的,也就是
臟讀,其實是mybatis在sqlSession執行commit()方法后會清空這個緩存。第二次去查詢,依然會從數據庫中查詢.
也可以手動調用sqlSession的clearCache()方法清除緩存
小例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@Test public void testCacheLever1() throws Exception{ SqlSession session = factory.openSession(); UserMapper mapper = session.getMapper(UserMapper. class ); //第一次請求,查詢id為1的用戶 User user = mapper.findUserById( 1 ); System.out.println(user); //更改數據,會清空緩存 user.setUsername( "yyyy" ); mapper.updateUser(user); session.commit(); //第二次查詢會從緩存中找 User user2 = mapper.findUserById( 1 ); System.out.println(user2); session.close(); } |
問題:
如果sqlSession關閉了,緩存也就清空了。這怎么使用緩存來提高效率呢?
好了,下篇文章給大家介紹mybatis二級緩存。
以上所述是小編給大家介紹的Mybatis一級緩存,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:http://blog.csdn.net/i_jack/article/details/53764496