日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

16-二级缓存

發布時間:2025/5/22 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 16-二级缓存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 一、SqlMapConfig.xml
  • 二、IUserDao.xml
  • 三、JAVA 代碼
  • 四、Log 輸出
  • 五、總結

二級緩存:

  • 它指的是 Mybatis 中 SqlSessionFactory 對象的緩存。由同一個 SqlSessionFactory 對象創建的 SqlSession 共享其緩存
  • 二級緩存的使用步驟
  • 讓 Mybatis 框架支持二級緩存(在SqlMapConfig.xml配置)
  • 讓當前的映射文件支持二級緩存(在IUserDao.xml中配置)
  • 讓當前的操作支持二級緩存(在select標簽中配置)
  • 一、SqlMapConfig.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><properties resource="jdbcConfig.properties"/><settings><!--默認為 true--><setting name="cacheEnabled" value="true"/></settings><typeAliases><package name="domain"/></typeAliases><environments default="mysql"><environment id="mysql"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}" /><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><package name="dao"/></mappers> </configuration>

    二、IUserDao.xml

    <?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="dao.IUserDao"><!--開啟 uer 支持二級緩存--><cache/><!--不管有沒有賬戶,用戶的信息都得有,所以不能用內連接,所以用左外連接,會返回左表的所有數據--><select id="findAll" resultType="user">select *from user</select><select id="findById" parameterType="integer" resultType="user" useCache="true">select *from user where id=#{userId}</select><update id="updateUser" parameterType="User">update user set username=#{username},address=#{address} where id=#{id}</update> </mapper>

    三、JAVA 代碼

    @Testpublic void testFirstLevelCache(){SqlSession sqlSession1=factory.openSession();IUserDao dao1=sqlSession1.getMapper(IUserDao.class);User user1=dao1.findById(1);System.out.println(user1);//一級緩存消失sqlSession1.close();SqlSession sqlSession2=factory.openSession();IUserDao dao2=sqlSession2.getMapper(IUserDao.class);User user2=dao2.findById(1);System.out.println(user2);//一級緩存消失sqlSession1.close();System.out.println(user1==user2);}

    四、Log 輸出

    Opening JDBC Connection [DEBUG] 2019-08-17 09:09:12,364 method:org.apache.ibatis.datasource.pooled.PooledDataSource.popConnection(PooledDataSource.java:424) Created connection 1634132079. [DEBUG] 2019-08-17 09:09:12,365 method:org.apache.ibatis.transaction.jdbc.JdbcTransaction.setDesiredAutoCommit(JdbcTransaction.java:100) Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@6166e06f] [DEBUG] 2019-08-17 09:09:12,369 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143) ==> Preparing: select *from user where id=? [DEBUG] 2019-08-17 09:09:12,389 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143) ==> Parameters: 1(Integer) [DEBUG] 2019-08-17 09:09:12,437 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143) <== Total: 1 domain.User@4d49af10 [DEBUG] 2019-08-17 09:09:12,451 method:org.apache.ibatis.transaction.jdbc.JdbcTransaction.resetAutoCommit(JdbcTransaction.java:122) Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@6166e06f] [DEBUG] 2019-08-17 09:09:12,451 method:org.apache.ibatis.transaction.jdbc.JdbcTransaction.close(JdbcTransaction.java:90) Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@6166e06f] [DEBUG] 2019-08-17 09:09:12,452 method:org.apache.ibatis.datasource.pooled.PooledDataSource.pushConnection(PooledDataSource.java:381) Returned connection 1634132079 to pool. [DEBUG] 2019-08-17 09:09:12,456 method:org.apache.ibatis.cache.decorators.LoggingCache.getObject(LoggingCache.java:60) Cache Hit Ratio [dao.IUserDao]: 0.5 domain.User@c540f5a false

    五、總結

  • 由 log 日志可知總共查詢了一次,第二次是從緩存中查詢的。
  • 最后結果為 false,這個是因為二級緩存存儲的是數據而不是對象
  • {"id":1,"username":"老王","address":"北京"}
  • 它會在第二次查詢的時候創建一個新的對象,再把數據填充進去
  • 轉載于:https://www.cnblogs.com/zuiren/p/11406149.html

    總結

    以上是生活随笔為你收集整理的16-二级缓存的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。