MyBatis
2023-06-09 14:36:20 9 举报
AI智能生成
MyBatis
作者其他创作
大纲/内容
基本原理
基本特点
支持原生 SQL
SQL 与代码解耦
简单易用
SQL 调优灵活
无法生成 SQL(可使用 Plus)
数据库移植性差
与其他框架对比
Hibernate
Spring Data JPA
主要对象
SqlSessionFactory
SqlSession
Executor
Handler
StatementHandler
ParameterHandler
ResultSetHandler
TypeHandler
使用须知
预编译防止 SQL 注入:#{}
插入后获取自增 id
动态 SQL 标签
功能扩展
插件
拦截器链
作用点
Executor
StatementHandler
ParameterHandler
ResultSetHandler
常用插件
分页插件:mybatis-pagehelper
集成 Spring
核心处理层
初始化
解析 mybatis-config.xml
解析 <properties> 标签
解析 <settings> 标签
处理日志相关组件
解析 <typeAliases> 标签
解析 <plugins> 标签
解析 <objectFactory> 标签
解析 <objectWrapperFactory> 标签
解析 <reflectorFactory> 标签
解析 <environments> 标签
解析 <databaseIdProvider> 标签
解析 <typeHandlers> 标签
解析 <mappers> 标签
解析 Mapper.xml
获取 <mapper> 标签中的 namespace 属性并检查
处理 <cache> 标签
StrictMap
处理<cache-ref>标签
CacheRefResolver
解析 <resultMap> 标签
解析 <id>、<result>、<constructor> 标签
解析 <association> 和 <collection> 标签
解析 <discriminator> 标签
解析 SQL 语句
处理 <include> 标签
处理 <selectKey> 标签
处理 SQL 语句
动态 SQL 解析
OGNL 表达式语言
SQL 解析上下文:DynamicContext
组合模式:SqlNode
StaticTextSqlNode
MixedSqlNode
TextSqlNode
IfSqlNode
TrimSqlNode
WhereSqlNode
SetSqlNode
ForeachSqlNode
PrefixedContext
ChooseSqlNode
VarDeclSqlNode
解析属性和占位符:SqlSourceBuilder
#{} 占位符处理:GenericTokenParser
ParameterMappingTokenHandler
SQL 管理:SqlSource
DynamicSqlSource
RawSqlSource
StaticSqlSource
SQL 执行
结果集映射
Executor
Statement
基础支撑层
JDBC
原生 JDBC 执行流程
ORM 实现
反射管理
Class 封装:Reflector
核心字段
初始化流程
核心方法
获取方法信息
记录 conflictingXxx 集合
解决方法签名冲突
构造方法
反射执行方法:Invoker
Reflector 构造:ReflectorFactory
反射工厂:ObjectFactory
属性解析工具
PropertyTokenizer
PropertyCopier
PropertyNamer
类元信息:MetaClass
对象元信息:ObjectWrapper
BaseWrapper
BeanWrapper
CollectionWrapper
MapWrapper
元对象:MetaObject
类型关系
类型管理:TypeHandler 和 BaseTypeHandler
LongTypeHandler
自定义 TypeHandler
类型注册与查询:TypeHandlerRegistry
注册
jdbcTypeHandlerMap
typeHandlerMap
allTypeHandlersMap
NULL_TYPE_HANDLER_MAP
register
读取 @MappedJdbcTypes 注解
读取 @MappedTypes 注解
构造方法
查询
别名管理:TypeAliasRegistry
日志框架
适配器模式
代理模式
静态代理
JDK 动态代理
JDBC Logger
事务管理
数据源工厂:DataSourceFactory
非池化数据源:UnpooledDataSource
池化数据源:PooledDataSource
连接对象:PooledConnection
连接池状态:PoolState
获取连接:popConnection
释放连接:pushConnection
检测连接可用性:isValid
事务工厂:TransactionFactory
JdbcTransactionFactory
ManagedTransactionFactory
Mapper 映射
Mapper 注册:MapperRegistry
对象动态代理:MapperProxy 和 MapperProxyFactory
SQL 执行:MapperMethod
缓存管理
一级缓存
基本配置
作用域:Session/Statement
HashMap 实现
默认开启
二级缓存
基本配置
作用域:Mapper(namespace)
支持 ehcache 等缓存实现
可配置剔除策略、刷新间隔、缓存数量
装饰器模式:Cache
实现基本能力:PerpetualCache
缓存装饰器
BlockingCache
FifoCache
LruCache
SoftCache
WeakCache
0 条评论
下一页