mybatis的缓存机智

本文详细介绍了Mybatis的一级和二级缓存机制。一级缓存是SqlSession级别的,而二级缓存则是Mapper级别的,可跨SqlSession使用。文章讨论了如何启用二级缓存,包括配置文件设置、Mapper配置、序列化接口实现等,并指出二级缓存存在的数据一致性问题,尤其在多条数据更新时可能引发的问题。
摘要由CSDN通过智能技术生成

1.mybatis的缓存机制

1.1一级缓存:直观的理解就是某个sqlseesion的一个Map,结果用于存储一定数量的查询结果,在sqlseesion进行更新,删除操作时,mybatis会清空一级缓存,保持数据的一致性。值得注意的是mybatis与spring结合,一级缓存当sqlsession的事务提交了,spring将会关闭sqlseesion也就是将此sqlseesion的缓存清空。

1.2二级缓存:也就是某个mapper的一个Map,但是二级缓存不一定存在内存,而是多种存储介质,还可以是借助ehcache实现分布式存储。第一个sqlseesion查询了数据库之后,mybatis会进行缓存,当第二个sqlseesion 查询的时候首先会在mapper的缓存下,查询,没有再查询数据库。

2.使用

2.1一级缓存

//一级缓存一般不用管理,在你不知不觉下的就会使用了,使用代码,理解一级缓存的效果
@Controller
@RequestMapping("/order")
public class OrderController {
   
    @Autowired
    private OrderMapper ordermapper;

    //事务管理
    @Autowired
    private DataSourceTransactionManager txManager;

    //事务定义
    @Autowired
    private DefaultTransactionDefinition txDefinition;

    @RequestMapping(value="/findorder",method=RequestMethod.GET)
    public String findOrderAndOrderDetail(HttpServletRequest request)
    {   
        //获取事务状态
        TransactionStatus status = txManager.getTransaction(txDefinition);

        Order order = ordermapper.findOrderAndOrderDetail();
        System.out.println(order.toString()+"这是订单一");
        Order order2 = ordermapper.findOrderAndOrderDetail();
        System.out.println(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值