日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

16-二级缓存

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

目錄

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

二級緩存:

  • 它指的是 Mybatis 中 SqlSessionFactory 對象的緩存。由同一個 SqlSessionFactory 對象創(chuàng)建的 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/><!--不管有沒有賬戶,用戶的信息都得有,所以不能用內連接,所以用左外連接,會返回左表的所有數(shù)據(jù)--><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,這個是因為二級緩存存儲的是數(shù)據(jù)而不是對象
  • {"id":1,"username":"老王","address":"北京"}
  • 它會在第二次查詢的時候創(chuàng)建一個新的對象,再把數(shù)據(jù)填充進去
  • 轉載于:https://www.cnblogs.com/zuiren/p/11406149.html

    總結

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

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