国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - mybatis中的緩存問題解析

mybatis中的緩存問題解析

2020-09-11 10:50_江南一點(diǎn)雨 Java教程

本篇文章主要介紹了mybatis中的緩存問題解析,詳細(xì)的介紹了關(guān)于mybatis的一級緩存和二級緩存,具有一定的參考價(jià)值,有興趣的可以了解一下。

關(guān)于mybatis基礎(chǔ)我們前面幾篇博客已經(jīng)介紹了很多了,今天我們來說一個(gè)簡單的問題,那就是mybatis中的緩存問題。mybatis本身對緩存提供了支持,但是如果我們沒有進(jìn)行任何配置,那么默認(rèn)情況下系統(tǒng)只開啟了一級緩存,一級緩存就是同一個(gè)sqlsession執(zhí)行的相同查詢是會進(jìn)行緩存的,ok,那么今天我們就來看看這些緩存,并簡單驗(yàn)證下。

系統(tǒng)默認(rèn)開啟了一級緩存

這個(gè)緩存系統(tǒng)默認(rèn)情況下是開啟的,當(dāng)我們獲取到一個(gè)sqlsession對象之后,如果調(diào)用sqlsession中的同一個(gè)方法查詢同一條數(shù)據(jù),那么第二次查詢將不會去數(shù)據(jù)庫中查詢,因?yàn)榈谝淮尾樵冇芯彺妫苯诱{(diào)用緩存數(shù)據(jù)即可,除非緩存超時(shí)或者我們明確聲明數(shù)據(jù)要刷新,否則都是直接調(diào)用緩存數(shù)據(jù)。ok,我們來看一個(gè)簡單的案例。
查詢代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sqlsession sqlsession = null;
    try {
      sqlsession = dbutils.opensqlsession();
      usermapper mapper = sqlsession.getmapper(usermapper.class);
      //查詢同一條數(shù)據(jù)時(shí)會緩存
      user user = mapper.getuser(1l);
      user user2 = mapper.getuser(1l);
      system.out.println(user.tostring());
      system.out.println(user2.tostring());
      sqlsession.commit();
    } catch (exception e) {
      system.err.println(e.getmessage());
      sqlsession.rollback();
    } finally {
      if (sqlsession != null) {
        sqlsession.close();
      }
    }

我們來看看日志:

mybatis中的緩存問題解析

小伙伴們看到,我這里執(zhí)行了兩次查詢,但實(shí)際上只執(zhí)行了一次sql語句。

自己配置二級緩存

上面的緩存是由系統(tǒng)默認(rèn)配置的,這個(gè)有一定的局限性,就是只能在同一個(gè)sqlsession中有效,脫離了同一個(gè)sqlsession就沒法使用這個(gè)緩存了,有的時(shí)候我們可能希望能夠跨sqlsession進(jìn)行數(shù)據(jù)緩存。那么這個(gè)時(shí)候需要我們進(jìn)行手動開啟二級緩存。

二級緩存的開啟方式其實(shí)很簡單,只需要我們在usermapper.xml中配置<cache/>節(jié)點(diǎn)即可。如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8" ?>
<!doctype mapper
public "-//mybatis.org//dtd mapper 3.0//en"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.sang.db.usermapper">
  <cache/>
  <select id="getuser" resulttype="org.sang.bean.user" parametertype="long">
    select * from user where id = #{id}
  </select>
  <insert id="insertuser" parametertype="org.sang.bean.user">
    insert into user(username,password,address) values (#{username},#{password},#{address})
  </insert>
  <delete id="deleteuser" parametertype="long">
    delete from user where id=#{id}
  </delete>
  <select id="getall" resulttype="u">
    select * from user
  </select>
</mapper>

這樣簡單配置之后,二級緩存就算開啟了,這樣的配置中,許多東西都是默認(rèn)的,比如所有的select語句都會被緩存,所有的delete、insert和update則都會將緩存刷新,還比如緩存將使用lru算法進(jìn)行內(nèi)存回收等。那么這些東西如果需要配置的話,我們可以按如下方式進(jìn)行配置:

<cache eviction="lru" flushinterval="20000" size="1024" readonly="true"/>,這里的eviction表示緩存策略,除了lru之外還有先進(jìn)先出(fifo)、軟引用(soft)、弱引用(weak)等,flushinterval則表示刷新時(shí)間,表示緩存的對象個(gè)數(shù),readonly為true則表示緩存只可以讀取不可以修改。

ok,做了如上配置之后還不夠,開啟二級緩存還要求我們的實(shí)體類可以序列化,實(shí)現(xiàn)serializable接口即可,如下:

?
1
2
3
4
5
6
7
8
9
public class user implements serializable{
  private long id;
  private string username;
  private string password;
  private string address;
 
  ...
 
}

如此之后,我們的二級緩存就算成功開啟了,ok,我么來測試下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sqlsession sqlsession = null;
    sqlsession sqlsession2 = null;
    try {
      sqlsession = dbutils.opensqlsession();
      usermapper mapper = sqlsession.getmapper(usermapper.class);
      user user = mapper.getuser(1l);
      system.out.println(user.tostring());
      sqlsession.commit();
      sqlsession2 = dbutils.opensqlsession();
      usermapper mapper2 = sqlsession2.getmapper(usermapper.class);
      user user2 = mapper2.getuser(1l);
      system.out.println(user2.tostring());
      sqlsession2.commit();
    } catch (exception e) {
      system.err.println(e.getmessage());
      sqlsession.rollback();
      sqlsession2.rollback();
    } finally {
      if (sqlsession != null) {
        sqlsession.close();
      }
      if (sqlsession2 != null) {
        sqlsession2.close();
      }
    }

打印日志如下:

mybatis中的緩存問題解析

ok,小伙伴們看到sql語句實(shí)際上只執(zhí)行了一次。

ok,以上就是對mybatis中緩存的一個(gè)簡單介紹。

本文案例下載: 本文案例github地址https://github.com/lenve/javaeetest/tree/master/test27-mybatis8

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://blog.csdn.net/u012702547/article/details/55051908

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 毛片在线网址 | 免费看国产片在线观看 | 成人久久久精品乱码一区二区三区 | 欧美激情视频一区二区三区在线播放 | 九九综合 | 激情久久综合网 | 中文字幕在线观看一区二区三区 | 婷婷亚洲五月 | 日韩精品免费在线观看 | 亚洲成av人影片在线观看 | 成人在线免费视频 | 亚洲精品久久久久久久久久久 | 中文字幕一区二区三区精彩视频 | 久久国产高清 | 国产福利在线 | 日韩精品一区二区三区四区 | 久久久久久91亚洲精品中文字幕 | 免费一级特黄3大片视频 | 中文字幕av亚洲精品一部二部 | 免费的av | 免费成人av网站 | 色综合一区二区三区 | 国产精品福利在线 | 国产激情91久久精品导航 | 日韩一区久久 | 乱视频在线观看 | 亚洲精品www久久久久久广东 | 99久久婷婷国产精品综合 | 青青草91在线视频 | 午夜爱| 日韩国产精品一区二区 | 在线视频自拍 | 亚洲国产一区在线 | 影音先锋男人网 | 色吧av| 午夜精品福利在线观看 | 成人免费一区二区三区视频网站 | 国产亚洲精品久久久 | 欧美成人h版在线观看 | 黄色成人av | 亚洲xx视频|