您好,登錄后才能下訂單哦!
二級緩存需要手動的配置和開啟,具體如下
在總的配置件中設置開啟二級緩存
/Mybatis02/config/mybatis-conf.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 新增settings標簽--> <settings> <!-- 開啟二級緩存 --> <settring name="cacheEnabled" value="true"/> </settings> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/hkgoods"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mappers/GoodsInfoMapper.xml"/> <mapper resource="mappers/NationMapper.xml"/> </mappers> </configuration>
光開這個還沒用,還需要在每個映射XML文件里 開啟這樣個標簽
/Mybatis02/config/mappers/GoodsInfoMapper.xml
沒完,還有第三步。要讓我們的實體類,(也就是JaveBean)實現一個系列化接口
總結
2.1在總的配置件中設置開啟二級緩存
/Mybatis02/config/mappers/GoodsInfoMapper.xml
<!-- 想要當前查詢支持二級緩存 需要在標簽 加入 useCache="true--> <select id="selAll" resultType="com.chen.GoodsInfo" useCache="true"> select ID e_id,name e_name,image e_image from goods </select>
/Mybatis02/src/test/Start2.java
public class Start2 { public static void main(String[] args) throws IOException { String resource = "mybatis-conf.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); //創建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //true表示自動提交。否則需要使用commit方法才會提交。默認是false SqlSession session = sqlSessionFactory.openSession(); //拿到接口的代理對象 GoodsDao2 dao=session.getMapper(GoodsDao2.class); //拿到了dao這個對象接下來就可以創建sql語句了;(直接調用接口方法) long s1 = System.currentTimeMillis(); List list = dao.selAll(); System.out.println(list); long e1 =System.currentTimeMillis(); System.out.println("第一次查詢時間:"+(e1-s1)); //再做一次重復查詢,測試下執行時間 SqlSession session2 = sqlSessionFactory.openSession(); //拿到接口的代理對象 GoodsDao2 dao2=session2.getMapper(GoodsDao2.class); long s2 = System.currentTimeMillis(); List list2 = dao2.selAll(); System.out.println(list2); long e2 =System.currentTimeMillis(); System.out.println("第一次查詢時間:"+(e2-s2)); //如果上面不設置自動提交表單,那么就需要commit方法 session.commit(); } }
點擊運行
第二次,并沒有從緩存中取數據,而是又重新發出了一條SQL語句查詢。那么這是什么問題?
在新的SqlSession對象,使用二級緩存中的數據的時候,需要先將前面的SqlSession對象關閉,數據才會進入二級緩存
public class Start2 { public static void main(String[] args) throws IOException { String resource = "mybatis-conf.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); //創建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //true表示自動提交。否則需要使用commit方法才會提交。默認是false SqlSession session = sqlSessionFactory.openSession(); //拿到接口的代理對象 GoodsDao2 dao=session.getMapper(GoodsDao2.class); //拿到了dao這個對象接下來就可以創建sql語句了;(直接調用接口方法) long s1 = System.currentTimeMillis(); List list = dao.selAll(); System.out.println(list); long e1 =System.currentTimeMillis(); System.out.println("第一次查詢時間:"+(e1-s1)); //在新的SqlSession對象,使用二級緩存中的數據的時候,需要先將前面的SqlSession對象關閉,數據才會進入二級緩存 session.close(); //再做一次重復查詢,測試下執行時間 SqlSession session2 = sqlSessionFactory.openSession(); //拿到接口的代理對象 GoodsDao2 dao2=session2.getMapper(GoodsDao2.class); long s2 = System.currentTimeMillis(); List list2 = dao2.selAll(); System.out.println(list2); long e2 =System.currentTimeMillis(); System.out.println("第一次查詢時間:"+(e2-s2)); \ //如果上面不設置自動提交表單,那么就需要commit方法 session.commit(); } }
點擊運行
這個才是二級緩存。第一次的已經close掉了 。第二次它讀取了二級緩存中的數據,并沒有自己再重新發新的SQL語句。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。