国产探花免费观看_亚洲丰满少妇自慰呻吟_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 可直接定位到。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通海县| 昆山市| 界首市| 平武县| 宜宾县| 黔江区| 滕州市| 辽阳县| 伊吾县| 乌鲁木齐县| 南皮县| 福清市| 闽清县| 罗源县| 扶风县| 梅州市| 定南县| 巴彦县| 长海县| 大同县| 徐州市| 梓潼县| 桑日县| 额尔古纳市| 吉木萨尔县| 苏尼特左旗| 砀山县| 浦江县| 长垣县| 彭州市| 芷江| 蛟河市| 盱眙县| 望奎县| 丰镇市| 水富县| 田林县| 稷山县| 三江| 扎囊县| 抚松县|