溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

mybatis二級(jí)緩存的實(shí)現(xiàn)代碼

發(fā)布時(shí)間:2020-10-03 20:03:33 來(lái)源:腳本之家 閱讀:144 作者:Pororo 欄目:編程語(yǔ)言

二級(jí)緩存需要手動(dòng)的配置和開(kāi)啟,具體如下

在總的配置件中設(shè)置開(kāi)啟二級(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>
    <!-- 開(kāi)啟二級(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>

光開(kāi)這個(gè)還沒(méi)用,還需要在每個(gè)映射XML文件里 開(kāi)啟這樣個(gè)標(biāo)簽

/Mybatis02/config/mappers/GoodsInfoMapper.xml

mybatis二級(jí)緩存的實(shí)現(xiàn)代碼

沒(méi)完,還有第三步。要讓我們的實(shí)體類(lèi),(也就是JaveBean)實(shí)現(xiàn)一個(gè)系列化接口

mybatis二級(jí)緩存的實(shí)現(xiàn)代碼

總結(jié)

2.1在總的配置件中設(shè)置開(kāi)啟二級(jí)緩存

mybatis二級(jí)緩存的實(shí)現(xiàn)代碼

/Mybatis02/config/mappers/GoodsInfoMapper.xml

<!-- 想要當(dāng)前查詢(xún)支持二級(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ì)象接下來(lái)就可以創(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("第一次查詢(xún)時(shí)間:"+(e1-s1));
    
    //再做一次重復(fù)查詢(xún),測(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("第一次查詢(xún)時(shí)間:"+(e2-s2));
  
    //如果上面不設(shè)置自動(dòng)提交表單,那么就需要commit方法
    session.commit();
  }

}

 點(diǎn)擊運(yùn)行

mybatis二級(jí)緩存的實(shí)現(xiàn)代碼

第二次,并沒(méi)有從緩存中取數(shù)據(jù),而是又重新發(fā)出了一條SQL語(yǔ)句查詢(xún)。那么這是什么問(wèn)題?

在新的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ì)象接下來(lái)就可以創(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("第一次查詢(xún)時(shí)間:"+(e1-s1));
    
    
    //在新的SqlSession對(duì)象,使用二級(jí)緩存中的數(shù)據(jù)的時(shí)候,需要先將前面的SqlSession對(duì)象關(guān)閉,數(shù)據(jù)才會(huì)進(jìn)入二級(jí)緩存
    session.close();
    //再做一次重復(fù)查詢(xún),測(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("第一次查詢(xún)時(shí)間:"+(e2-s2));
    
\
    //如果上面不設(shè)置自動(dòng)提交表單,那么就需要commit方法
    session.commit();
  }

}

點(diǎn)擊運(yùn)行

mybatis二級(jí)緩存的實(shí)現(xiàn)代碼

這個(gè)才是二級(jí)緩存。第一次的已經(jīng)close掉了 。第二次它讀取了二級(jí)緩存中的數(shù)據(jù),并沒(méi)有自己再重新發(fā)新的SQL語(yǔ)句。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI