Mybatis的一级缓存和二级缓存

本文介绍了MyBatis的一级缓存和二级缓存机制。一级缓存默认开启,同一SqlSession内的重复查询会从缓存获取结果。二级缓存需在配置文件中开启,并在Mapper中配置,不同SqlSession间的查询可共享缓存,有效减少数据库访问。通过示例代码展示了如何使用和测试缓存效果,显示了SQL语句只执行一次的情况。
摘要由CSDN通过智能技术生成

mybatis默认为一级缓存

@Test
    public void findOrdersWithProduct(){
        SqlSession sqlSession = MybatisUtils.getSession();
        OrdersMapper mapper = sqlSession.getMapper(OrdersMapper.class);
        List<Orders> ordersWithProduct = mapper.findOrdersWithProduct(1);
        for (Orders orders : ordersWithProduct) {
            System.out.println(orders);
        }
        System.out.println("=============================");
        List<Orders> ordersWithProduct2 = mapper.findOrdersWithProduct(1);
        for (Orders orders : ordersWithProduct2) {
            System.out.println(orders);
        }
        System.out.println(ordersWithProduct == ordersWithProduct2);
        sqlSession.close();
    }

两次查询只调用了一次查询的SQL
在这里插入图片描述
二级缓存:
首先在配置文件中开启全局缓存

<settings>
        <!--显示的开启全局缓存-->
        <setting name="cacheEnabled" value="true"/>
</settings>

然后在要使用二级缓存的Mapper中开启

<!--在当前mapper.xml中使用二级缓存-->
    <cache eviction="FIFO"
           flushInterval="60000"
           size="512"
           readOnly="true"/>

测试:

@Test
    public void findOrdersWithProduct(){
        SqlSession sqlSession1 = MybatisUtils.getSession();
        SqlSession sqlSession2 = MybatisUtils.getSession();
        OrdersMapper mapper = sqlSession1.getMapper(OrdersMapper.class);
        List<Orders> ordersWithProduct = mapper.findOrdersWithProduct(1);
        for (Orders orders : ordersWithProduct) {
            System.out.println(orders);
        }
        sqlSession1.close();

        System.out.println("=============================");

        OrdersMapper mapper2 = sqlSession2.getMapper(OrdersMapper.class);
        List<Orders> ordersWithProduct2 = mapper2.findOrdersWithProduct(1);
        for (Orders orders : ordersWithProduct2) {
            System.out.println(orders);
        }
        System.out.println(ordersWithProduct == ordersWithProduct2);
        sqlSession2.close();
    }

会发现SQL语句只执行了一次
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值