国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

MyBatis(十) 緩存

2019-11-09 14:37:56
字體:
來源:轉載
供稿:網友

MyBatis 存在 一級 和 二級 緩存(默認一級緩存是開啟的)

一級緩存保存在 每個 Sqlsession 中 互不影響。 二級緩存保存在 于Mapper(namespace ) 中。

這里寫圖片描述

緩存數據什么周期: 在一級緩存存在于單次的事務,創建SQLSession 到 SQLSession.close緩存被銷毀,中間如果執行Commit命令,緩存同樣會被清空。 一級緩存單次事務 - 第一次: SqlSession.findUserById(1) 緩存(空) 查詢數據庫 - 第二次: SqlSession.findUserById(1) 緩存(有) 讀取 緩存 - 修改數據: SqlSession.commit() 緩存(自動清空) 數據被修改 - 第三次: SqlSession.findUserById(1) 緩存(空) 查詢數據庫 - 完成退出 SqlSession.close() 緩存(清空)

二級緩存 二級緩存 的域:使用 namespace 做為key,如果兩個mapper 使用同一 namespace做key 那么就會共用一個 二級緩存

二級緩存 開啟條件, 1、需要在 mapper.xml 中添加 <cache/> 標簽。 2、被緩存的對象需要實現序列號接口,否者會報錯。

測試:

public void selectOrder() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sqlSessionFactory.openSession(); OrderDaoLazy mapper = session.getMapper(OrderDaoLazy.class); User user = mapper.findUser(1); System.out.PRintln(user.toString()); session.close();//關閉后,一級緩存就會被銷毀,但是在同一namespace下,會保存在二級緩存內。 System.out.println("===================="); SqlSession session1 = sqlSessionFactory.openSession(); OrderDaoLazy mapper1 = session1.getMapper(OrderDaoLazy.class); User user1 = mapper1.findUser(1); System.out.println(user1.toString()); session.close(); }

<cache/>中有一個參數

<cache eviction="FIFO" // flushInterval="60000" //每隔 60 秒刷新 size="512" //存數結果對象或列表的 512 個引用 readOnly="true"/>//返回的對象設置為只讀,在不同線程中的調用者之間修改它們會導致沖突

具體可參見文檔 :(http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html) 跳入頁面 按 Ctrl+F 查找 flushInterval 可直接定位到。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九龙坡区| 峡江县| 贺兰县| 兴业县| 临桂县| 衢州市| 潞城市| 珠海市| 湄潭县| 韶山市| 西峡县| 富顺县| 西充县| 桂平市| 沭阳县| 芮城县| 柘城县| 兴城市| 孟连| 靖宇县| 大姚县| 余干县| 察哈| 周宁县| 怀化市| 闸北区| 隆德县| 绥化市| 公安县| 盐源县| 泽普县| 天气| 体育| 昌宁县| 灵璧县| 静宁县| 龙南县| 昭通市| 湄潭县| 中牟县| 湄潭县|