Mybatis基础概念+缓存机制原理图解

Mybatis基础概念

概念

1、Mybatis 是一个半 ORM(对象关系映射)框架,内部封装了 JDBC,开发者在使用过程中只需要关注 SQL 语句本身,编写原生态的 SQL,严格控制 SQL 执行性能,灵活性高。
2、可以使用 XML 或者注解来配置和映射原生信息,将 POJO映射成数据库中的记录。
3、通过 XML 文件或者注解的方式将要执行的各种 Statement 配置起来,通过 java 对象和 statement 的动态参数进行映射生成最终执行的 SQL 语句,最终 Mybatis 框架将结果集作为 Java 对象并返回。

优点

1、基于 SQL 编程,灵活性高;将 SQL 语句写入 XML 文件当中,降低了 SQL 语句与业务逻辑的耦合度,从而更加方便维护。
2、封装了 JDBC,简化了代码的书写过程。
3、兼容性好,能够与 Spring 框架很好地集成。

缺点

1、SQL 语句地编写工作量比较大。
2、数据移植性不是很好。

Mybatis缓存机制

默认情况下,Mybatis中有一级缓存和二级缓存,默认情况下一级缓存是开启的,而且是不能关闭的。

一级缓存

指 SqlSession 级别的缓存,当同一个 SqlSession 中进行相同的SQL语句查询时,第二次以后的查询就不会从数据库中查询,而是直接从缓存中获取,一级缓存最多缓存1024条 SQL。

二级缓存

指可以跨SqlSession的缓存,是 mapper 级别的缓存,对于 mapper 级别的缓存,不同的 SqlSession 是可以共享的。

贴出一张原理图

在这里插入图片描述

一级缓存原理(SqlSession级别)

第一次发出一个查询 sql,sql 查询结果写入 sqlSession的一级缓存中,缓存使用的数据结构是一个 map 集合。

key: MapperID + offset + limit + Sql +所有的入参

value: 用户信息

同一个 SqlSession 再次发出相同的 Sql ,就从缓存中取出数据。如果出现两次中间出现 commit 操作(修改、添加、删除),本 SqlSession 中的一级缓存区域全部清空,下次再去缓存中查询不到数据,就要去数据库中查找数据,从数据库中查询到再写入缓存。

二级缓存原理(mapper级别)

二级缓存的范围是 mapper 级别 (mapper 是一个命名空间),mapper 以命名空间为单位创建缓存数据结构,结构是 map。Mybatis 的二级缓存是通过 CacheExecutor 实现的。CacheExecutor 其实是 Executor 的代理对象。所有查询操作,在 CacheExecutor 中都会先匹配缓存中的是否存在,不存在则查询数据库。

key: MapperID + offset + limit + Sql +所有的入参

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值