MyBatis
MyBatis 是第一个支持自定义 SQL、存储过程和高级映射的类持久框架。MyBatis 消除了大部分 JDBC 的样板代码、手动设置参数以及检索结果。MyBatis 能够支持简单的 XML 和注解配置规则,使 Map 接口和 POJO 类映射到数据库字段和记录。
- 接口层,接口层就是开发人员在 Mapper 或者是 Dao 接口中的接口定义,是查询、新增、更新还是删除操作。
- 数据处理层,主要是配置 Mapper -> XML 层级之间的参数映射,SQL 解析,SQL 执行,结果映射的过程
- 基础支持层
- 缓存模块
- 事务管理模块, 一般地Mybatis 与 Spring 框架集成,由 Spring 框架管理事务。但 Mybatis 自身对数据库事务进行了抽象,提供了相应的事务接口和简单实现。
- 类型转换模块,Mybatis 的别名机制,能够简化配置文件,该机制是类型转换模块的主要功能之一。类型转换模块的另一功能是实现 JDBC 类型与 Java 类型的转换,在 SQL 语句绑定参数时,会将数据由 Java 类型转换成 JDBC 类型;在映射结果集时,会将数据由 JDBC 类型转换成 Java 类型。
MyBatis 核心组件
- SqlSessionFactory,解析mybatis配置文件,提供创造SqlSession的方法
- SqlSession,执行命令,获取映射,管理事务的入口
- Executor,每一个 SqlSession 都会拥有一个 Executor 对象,这个对象负责增删改查的具体操作,我们可以简单的将它理解为 JDBC 中 Statement 的封装版
缓存功能
Mybatis 中有一级缓存
和二级缓存。
默认情况下一级缓存是开启的,而且是不能关闭的。一级缓存是指 SqlSession 级别的缓存,当在同一个 SqlSession 中进行相同的 SQL 语句查询时,第二次以后的查询不会从数据库查询,而是直接从缓存中获取,一级缓存最多缓存 1024 条 SQL。二级缓存是指可以跨 SqlSession 的缓存。 是 mapper 级别的缓存,对于 mapper 级别的缓存不同的sqlsession 是可以共享的。
这两级缓存都依赖于缓存模块中的实现。但是需要注意,这两级缓存与Mybatis 以及整个应用是运行在同一个 JVM 中的,共享同一块内存,如果这两级缓存中的数据量较大,则可能影响系统中其它功能。
一级缓存
第一次发出一个查询 sql, sql 查询结果写入 sqlsession 的一级缓存中,缓存使用的数据结构是一
个 map。同一个 sqlsession 再次发出相同的 sql,就从缓存中取出数据。如果两次中间出现 commit 操作本 sqlsession 中的一级缓存区域全部清空,下次再去缓存中查询不到所以要从数据库查询, 从数据库查询到再写入缓存。
- key: MapperID+offset+limit+Sql+所有的入参
- value:返回结果
二级缓存
二级缓存的范围是 mapper 级别(mapper 同一个命名空间), mapper 以命名空间为单位创建缓
存数据结构,结构是 map。 mybatis 的二级缓存是通过 CacheExecutor 实现的。 CacheExecutor其实是 Executor 的代理对象。所有的查询操作,在 CacheExecutor 中都会先匹配缓存中是否存在,不存在则查询数据库。
- key: MapperID+offset+limit+Sql+所有的入参
- value:返回结
JDBC
Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。
(1) java.sql.SQLException——这是JDBC异常的基类。
(2) java.sql.BatchUpdateException——当批处理操作执行失败的时候可能会抛出这个异常。这取决于具体的JDBC驱动的实现,它也可能直接抛出基类异常java.sql.SQLException。
(3) java.sql.SQLWarning——SQL操作出现的警告信息。
(4) java.sql.DataTruncation——字段值由于某些非正常原因被截断了(不是因为超过对应字段类型的长度限制)。
参考
spring-boot_starter:https://blog.csdn.net/qq_44894516/article/details/89294249
面试问题: https://juejin.im/post/5e350d895188254dfd43def5
缓存机制:https://tech.meituan.com/2018/01/19/mybatis-cache.html
https://www.cnblogs.com/cxuanBlog/p/11333021.html