mybatis二级缓存未生效

mybatis二级缓存未生效

问题描述:

跟着老师的视频讲解操作,mybatis二级缓存一直命中率是0.0

上面是代码地址, 求指点。 


相关代码:

https://gitee.com/qq376745187/mybatis.git


相关截图:

https://img1.sycdn.imooc.com//climg/628bc69e094294d028801626.jpg


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小尤 2022-05-24 10:27:28

同学你好,1、因网络的问题,老师无法查看同学提交的网站,建议同学在问答区以复制粘贴的方式反馈代码。

2、二级缓存的命中率为0。是因只会执行一次SQL。

    原因:这涉及到二级缓存的缓存什么时候存入。只有当当前的sqlSession.close()时,该sqlSession的数据才会存入二级缓存。在同一sqlSession下时,肯定没有执行.close()关闭sqlSession,自然也就没有存入二级缓存。第二次执行却没有重新发送sql语句,是因为第二次调用的是一级缓存中的数据,这两次查询使用的是同一个sqlSession对象。

    如果想让二级缓存命中率不为0,需要先开启一个sqlSession,执行一个sql语句,然后关闭该sqlSession,然后在创建一个新的sqlSession,执行相同的sql语句,这时,二级缓存才会命中。

祝学习愉快!

  • 提问者 czh666 #1
    //MybatisTestor.java 中的代码
    Exception SqlSession sqlSession = sqlSession = MybatisUtils.TGoods goods = sqlSession.selectOneSystem..printlngoods.hashCodeSystem..printlngoods.getTitleException ee.printStackTraceMybatisUtils.sqlSessionsqlSession = MybatisUtils.TGoods goods = sqlSession.selectOneSystem..printlngoods.hashCodeException ee.printStackTraceMybatisUtils.sqlSession
    select from t_goods
            where goods_id = value
                    <property name="driver" value="com.mysql.jdbc.Driver"/>

    日志

    2022-05-24 11:59:39.789 [main] DEBUG goods - Cache Hit Ratio [goods]: 0.0

    2022-05-24 11:59:39.796 [main] DEBUG o.a.i.t.jdbc.JdbcTransaction - Opening JDBC Connection

    2022-05-24 11:59:40.228 [main] DEBUG o.a.i.d.pooled.PooledDataSource - Created connection 1223867739.

    2022-05-24 11:59:40.228 [main] DEBUG o.a.i.t.jdbc.JdbcTransaction - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@48f2bd5b]

    2022-05-24 11:59:40.268 [main] DEBUG goods.selectById - ==>  Preparing: select * from t_goods where goods_id = ? 

    2022-05-24 11:59:40.331 [main] DEBUG goods.selectById - ==> Parameters: 741(Integer)

    2022-05-24 11:59:40.382 [main] DEBUG goods.selectById - <==      Total: 1

    921420643

    斯利安 孕妈专用 洗发水 氨基酸表面活性剂 舒缓头皮 滋养发根 让你的秀发会喝水 品质孕妈

    2022-05-24 11:59:40.384 [main] DEBUG goods - Cache Hit Ratio [goods]: 0.0

    2022-05-24 11:59:40.384 [main] DEBUG o.a.i.t.jdbc.JdbcTransaction - Opening JDBC Connection

    2022-05-24 11:59:40.447 [main] DEBUG o.a.i.d.pooled.PooledDataSource - Created connection 1010953501.

    2022-05-24 11:59:40.447 [main] DEBUG o.a.i.t.jdbc.JdbcTransaction - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@3c41ed1d]

    2022-05-24 11:59:40.453 [main] DEBUG goods.selectById - ==>  Preparing: select * from t_goods where goods_id = ? 

    2022-05-24 11:59:40.454 [main] DEBUG goods.selectById - ==> Parameters: 741(Integer)

    2022-05-24 11:59:40.463 [main] DEBUG goods.selectById - <==      Total: 1

    943870983


    2022-05-24 12:01:11
  • 好帮手慕小尤 回复 提问者 czh666 #2

    同学你好,同学反馈代码格式化有一点问题,老师查看不是完整的代码,建议同学选择正确的“代码语言“进行反馈。如下所示:

    https://img1.sycdn.imooc.com//climg/628c723109de11d201120358.jpg

    祝学习愉快!

    2022-05-24 13:50:46
  • 提问者 czh666 回复 好帮手慕小尤 #3
    //mybatisTestor.java
    @Test
    public void testLevel2Cache() throws Exception {
        SqlSession sqlSession = null;
        try {
            sqlSession = MybatisUtils.openSession();
            TGoods goods = sqlSession.selectOne("goods.selectById", 741);
            System.out.println(goods.hashCode());
            System.out.println(goods.getTitle());
        } catch (Exception e) {
            e.printStackTrace();
            MybatisUtils.closeSession(sqlSession);
        }
        try {
            sqlSession = MybatisUtils.openSession();
            TGoods goods = sqlSession.selectOne("goods.selectById", 741);
            System.out.println(goods.hashCode());
        } catch (Exception e) {
            e.printStackTrace();
            MybatisUtils.closeSession(sqlSession);
        }
    }
    <?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="goods">
        <!-- 开启二级缓存 -->
        <cache eviction="LRU" flushInterval="600000" size="512" readOnly="true"/>
        <select id="selectAll" resultType="com.imooc.mybatis.entity.TGoods">
            select *
            from t_goods
            order by goods_id desc
        </select>
        <select id="selectById" parameterType="Integer" resultType="com.imooc.mybatis.entity.TGoods" useCache="true">
            select *
            from t_goods
            where goods_id = #{value}
        </select>
        <select id="selectByPriceRange" parameterType="JSONObject" resultType="com.imooc.mybatis.entity.TGoods">
            select *
            from t_goods
            where current_price between #{min} and #{max}
            order by current_price limit #{limit}
        </select>
        <select id="selectGoodsMap" resultType="JSONObject">
            select g.*, c.category_name
            from t_goods g,
                 t_category c
            where g.category_id = c.category_id
        </select>
        <insert id="insertGoods" parameterType="com.imooc.mybatis.entity.TGoods">
            insert into t_goods (goods_id,title) value (#{goodsId}, #{title})
            <selectKey resultType="int" keyProperty="goodsId" order="AFTER">
                select last_insert_id()
            </selectKey>
        </insert>
        <update id="update" parameterType="com.imooc.mybatis.entity.TGoods">
            update t_goods
            set title = #{title}
            where goods_id = #{goodsId}
        </update>
    
        <resultMap id="selectOneToManyResultMap" type="com.imooc.mybatis.entity.TGoods">
            <id column="goods_id" property="goodsId"/>
            <collection property="goodsCoverList" select="goodsCover.selectByGoodsId" column="goods_id"/>
        </resultMap>
        <select id="selectOneToMany" resultMap="selectOneToManyResultMap">
            select *
            from t_goods limit 1
        </select>
    </mapper>
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <settings>
            <setting name="mapUnderscoreToCamelCase" value="true"/>
            <setting name="cacheEnabled" value="true"/>
        </settings>
        <typeAliases>
            <typeAlias alias="Integer" type="java.lang.Integer" />
            <typeAlias alias="Long" type="java.lang.Long" />
            <typeAlias alias="HashMap" type="java.util.HashMap" />
            <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
            <typeAlias alias="ArrayList" type="java.util.ArrayList" />
            <typeAlias alias="LinkedList" type="java.util.LinkedList" />
            <typeAlias alias="JSONObject" type="com.alibaba.fastjson.JSONObject" />
        </typeAliases>
    
        <plugins>
            <!--设置分页插件-->
            <plugin interceptor="com.github.pagehelper.PageInterceptor"/>
        </plugins>
    
        <environments default="dev">
            <environment id="dev">
                <!-- 采用JDBC方式管理事务 commit/rollback-->
                <transactionManager type="JDBC"/>
                <!-- 采用连接池方式管理数据库链接-->
                <dataSource type="POOLED">
    <!--                <property name="driver" value="net.sf.log4jdbc.DriverSpy"/>-->
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url"
                              value="jdbc:mysql://xxx/babytun?zeroDateTimeBehavior=convertToNull&amp;useSSL=false&amp;autoReconnect=true&amp;characterEncoding=utf8"/>
                    <property name="username" value="mydev"/>
                    <property name="password" value="1Qaz2wsx!@#"/>
                </dataSource>
            </environment>
        </environments>
    
    
        <mappers>
            <mapper resource="mappers/classes.xml"/>
            <mapper resource="mappers/goods.xml"/>
            <mapper resource="mappers/goods_cover.xml"/>
            <mapper resource="mappers/student.xml"/>
            <mapper resource="mappers/student1.xml"/>
        </mappers>
    </configuration>

    感谢老师的耐心指导

    2022-05-25 08:52:53
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师