mybatis二級(jí)緩存的實(shí)現(xiàn)代碼
二級(jí)緩存需要手動(dòng)的配置和開啟,具體如下
在總的配置件中設(shè)置開啟二級(jí)緩存
/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標(biāo)簽--> <settings> <!-- 開啟二級(jí)緩存 --> <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>
光開這個(gè)還沒用,還需要在每個(gè)映射XML文件里 開啟這樣個(gè)標(biāo)簽
/Mybatis02/config/mappers/GoodsInfoMapper.xml
沒完,還有第三步。要讓我們的實(shí)體類,(也就是JaveBean)實(shí)現(xiàn)一個(gè)系列化接口
總結(jié)
2.1在總的配置件中設(shè)置開啟二級(jí)緩存
/Mybatis02/config/mappers/GoodsInfoMapper.xml
<!-- 想要當(dāng)前查詢支持二級(jí)緩存 需要在標(biāo)簽 加入 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); //創(chuàng)建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //true表示自動(dòng)提交。否則需要使用commit方法才會(huì)提交。默認(rèn)是false SqlSession session = sqlSessionFactory.openSession(); //拿到接口的代理對(duì)象 GoodsDao2 dao=session.getMapper(GoodsDao2.class); //拿到了dao這個(gè)對(duì)象接下來就可以創(chuàng)建sql語(yǔ)句了;(直接調(diào)用接口方法) long s1 = System.currentTimeMillis(); List list = dao.selAll(); System.out.println(list); long e1 =System.currentTimeMillis(); System.out.println("第一次查詢時(shí)間:"+(e1-s1)); //再做一次重復(fù)查詢,測(cè)試下執(zhí)行時(shí)間 SqlSession session2 = sqlSessionFactory.openSession(); //拿到接口的代理對(duì)象 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("第一次查詢時(shí)間:"+(e2-s2)); //如果上面不設(shè)置自動(dòng)提交表單,那么就需要commit方法 session.commit(); } }
點(diǎn)擊運(yùn)行
第二次,并沒有從緩存中取數(shù)據(jù),而是又重新發(fā)出了一條SQL語(yǔ)句查詢。那么這是什么問題?
在新的SqlSession對(duì)象,使用二級(jí)緩存中的數(shù)據(jù)的時(shí)候,需要先將前面的SqlSession對(duì)象關(guān)閉,數(shù)據(jù)才會(huì)進(jìn)入二級(jí)緩存
public class Start2 { public static void main(String[] args) throws IOException { String resource = "mybatis-conf.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); //創(chuàng)建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //true表示自動(dòng)提交。否則需要使用commit方法才會(huì)提交。默認(rèn)是false SqlSession session = sqlSessionFactory.openSession(); //拿到接口的代理對(duì)象 GoodsDao2 dao=session.getMapper(GoodsDao2.class); //拿到了dao這個(gè)對(duì)象接下來就可以創(chuàng)建sql語(yǔ)句了;(直接調(diào)用接口方法) long s1 = System.currentTimeMillis(); List list = dao.selAll(); System.out.println(list); long e1 =System.currentTimeMillis(); System.out.println("第一次查詢時(shí)間:"+(e1-s1)); //在新的SqlSession對(duì)象,使用二級(jí)緩存中的數(shù)據(jù)的時(shí)候,需要先將前面的SqlSession對(duì)象關(guān)閉,數(shù)據(jù)才會(huì)進(jìn)入二級(jí)緩存 session.close(); //再做一次重復(fù)查詢,測(cè)試下執(zhí)行時(shí)間 SqlSession session2 = sqlSessionFactory.openSession(); //拿到接口的代理對(duì)象 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("第一次查詢時(shí)間:"+(e2-s2)); \ //如果上面不設(shè)置自動(dòng)提交表單,那么就需要commit方法 session.commit(); } }
點(diǎn)擊運(yùn)行
這個(gè)才是二級(jí)緩存。第一次的已經(jīng)close掉了 。第二次它讀取了二級(jí)緩存中的數(shù)據(jù),并沒有自己再重新發(fā)新的SQL語(yǔ)句。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot中的@RequestMapping注解的用法示例
@RequestMapping注解是SpringBoot中最常用的注解之一,它可以幫助開發(fā)者定義和處理HTTP請(qǐng)求,本篇文章我們將詳細(xì)為大家介紹如何使用SpringBoot中的@RequestMapping注解,感興趣的同學(xué)跟著小編一起來學(xué)習(xí)吧2023-06-06druid?handleException執(zhí)行流程源碼解析
這篇文章主要為大家介紹了druid?handleException執(zhí)行流程源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09Java使用easyExcel批量導(dǎo)入數(shù)據(jù)詳解
這篇文章主要介紹了Java使用easyExcel批量導(dǎo)入數(shù)據(jù)詳解,通常我們會(huì)提供一個(gè)模板,此模塊我們可以使用easyExcel導(dǎo)出數(shù)據(jù)生成的一個(gè)Excel文件當(dāng)作模板,提供下載鏈接,用戶在該文件內(nèi)填入規(guī)定的數(shù)據(jù)格式以后可以批量導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫(kù)中,需要的朋友可以參考下2023-08-08關(guān)于jdk9、jdk10、jdk11、jdk12、jdk13新特性說明
這篇文章主要介紹了關(guān)于jdk9、jdk10、jdk11、jdk12、jdk13新特性說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05Mybatis一對(duì)一延遲加載實(shí)現(xiàn)過程解析
這篇文章主要介紹了Mybatis一對(duì)一延遲加載實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10Java中將MultipartFile和File互轉(zhuǎn)的方法詳解
我們?cè)陂_發(fā)過程中經(jīng)常需要接收前端傳來的文件,通常需要處理MultipartFile格式的文件,今天來介紹一下MultipartFile和File怎么進(jìn)行優(yōu)雅的互轉(zhuǎn),需要的朋友可以參考下2023-10-10SpringBoot后端接收數(shù)組對(duì)象的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot后端接收數(shù)組對(duì)象的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11Struts2學(xué)習(xí)手冊(cè)之文件上傳基礎(chǔ)教程
Struts2提供的文件上傳下載機(jī)制十分簡(jiǎn)便,使得我們寫很少的代碼,下面這篇文章主要給大家介紹了關(guān)于Struts2學(xué)習(xí)手冊(cè)之文件上傳的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-05-05