MyBatis源码结构
2020-07-21 10:25:26 2 举报
AI智能生成
Mybatis源码解析
作者其他创作
大纲/内容
缓存
缓存类型
一级缓存
二级缓存
缓存调用方式
安全问题
缓存的唯一标识 CacheKey
设计模式
面向对象设计需要遵循的六大设计原则
单一职责原则
依赖倒转原则
开放-封闭原则
迪米特法则
里氏代换原则
接口隔离原则
外观模式
优点
使用场景
体现
适配器模式
优点
使用场景
体现
代理模式
优点
体现
工厂模式
优点
体现
装饰器模式
优点
体现
建造者模式
体现
优点
策略模式
体现
反射模块
MetaObject
ObjectWrapperFactory
ObjectWrapper
ObjectFactory
ReflectorFactory
originalObject
包结构说明
org.apache.ibatis.annotations
包含所有mapper 接口中用到的注解
例如常用的 @Param,@Update、@Select、@Delete 等
org.apache.ibatis.binding
生成mapper 接口的动态代理并进行管理
org.apache.ibatis.builder
包含Configuration对象所有构建器,主要包括XML、注解2种方式配置解析
BaseBuilder 构建器基类
XMLConfigBuilder 解析configuration.xml配置文件
XMLMapperBuilder 解析Mapper.xml配置文件
XMLStatementBuilder 解析elect\update\delete 标签
MapperAnnotationBuilder 注解式Mapper
org.apache.ibatis.cache
缓存功能实现、包含各种缓存装饰器
TransactionalCache 二级缓存功能实现
org.apache.ibatis.cursor
实现游标的方式查询数据、游标非常适合处理百万级别的数据查询,通常情况下不适合一次性加载到内存中
这种方式类似使用SAX解析XML文件
org.apache.ibatis.datasource
数据源 包括jndi数据源、连接池功能
org.apache.ibatis.executor
包含SQL语句执行器,核心功能包
功能包括:
主键生成功能
执行参数解析功能
执行结果集解析功能
SQL执行器
缓存执行器
ErrorContext 错误上下文对象,跟踪所有执行流程
org.apache.ibatis.exceptions
框架异常,常见异常:TooManyResultsException
org.apache.ibatis.io
资源文件读取
org.apache.ibatis.jdbc
JDBC一些操作
SqlRunner SQL执行
ScriptRunner 脚本执行,可以执行建库语句,在执行测试用例时候用的非常多
org.apache.ibatis.lang
这个包只有2个注解 @UsesJava7 @UsesJava8 使用这个两个注解标识哪些可以使用JDK7 API 哪些可以使用JDK8 API
org.apache.ibatis.logging
日志功能,实现多种日志框架的对接
org.apache.ibatis.logging.jdbc 代理所有功能JDBC 操作,实现了在debug模式下能够输出SQL
org.apache.ibatis.mapping
配置文件与实体对象的映射功能,Mapper映射、参数映射、结果映射等
org.apache.ibatis.parsing
解析工具包
GenericTokenParser:解析#{} ${} 这种占位符
XPathParser:XPath形式解析XML
PropertyParser: properties解析器
org.apache.ibatis.plugin
org.apache.ibatis.plugin
拦截器功能实现,使用代理模式实现拦截
可拦截的对象
org.apache.ibatis.reflection
反射器功能,这个包下实现元数据编程
通过把Java对象转换成 元数据对象MetaObject,然后就可以对元数据对象进行赋值操作,数据库查询结果到Java对象映射就是通过元对象实现
org.apache.ibatis.scripting
动态SQL语言实现,配置文件中<if> <where> <set> <foreach> <choose> 功能就是在这个包实现,借助OGNL表达式,你也可以扩展自己的语言实现功能
org.apache.ibatis.session
主要实现SqlSession功能,非常核心包
官方注释:SqlSession包含了MyBatis工作的所有的Java接口,通过这些接口你可以 执行SQL命令(insert\delete\update\select),获取Mapper,管理实务
org.apache.ibatis.transaction
事务功能实现,包装了数据库连接,处理数据库连接生命周期包括:连接创建,预编译,提交\回滚和关闭
org.apache.ibatis.type
类型处理器,包括所有数据库类型对应Java类型的处理器,如果要实现自己类型处理器就需要实现包下的基础接口
Mapper配置文件解析
mapper
属性
namespace
cache-ref
属性
namespace
cache
属性
type
eviction
flushInterval
size
readOnly
blocking
property
name
value
resultMap
属性
id
type
extends
autoMapping
constructor
id
result
association
collection
discriminator
parameterMap
属性
id
type
parameter
property
javaType
jdbcType
mode
resultMap
scale
typeHandler
sql
属性
id
lang
databaseId
include
trim
where
set
foreach
choose
if
bind
insert
属性
id
parameterMap
parameterType
timeout
flushCache
statementType
keyProperty
useGeneratedKeys
keyColumn
databaseId
lang
selectKey
include
trim
where
set
foreach
choose
if
bind
update
同insert
delete
同insert,少selectKey
select
属性
id
parameterMap
parameterType
resultMap
resultType
resultSetType
statementType
fetchSize
timeout
flushCache
useCache
databaseId
lang
resultOrdered
resultSets
Mapper文件使用
返回类型
resultType
resultMap
可配置属性
id
type
autoMapping
extends
主键策略
useGeneratedKeys
keyProperty
selectKey
属性
order
resultType
keyProperty
配置示例
Oracle
Mysql
SQL参数使用
#{}
${}
动态SQL标签
if
choose、when、otherwise
foreach
item
index
open
separator
close
collection
where
trim
prefix
suffix
suffixOverrides
prefixOverrides
set
批量插入
foreach标签实现
使用 BATCH 类型的 excutor
复杂结果集处理
association
联嵌套结果方式
嵌套查询方式
n+1问题
解决
collection
流程分析
configuration对象
初始化阶段
核心成员
BaseBuilder
XMLConfigBuilder
XMLMapperBuilder
XMLStatementBuilder
加载流程
1.实例化SqlSessionFactory过程中创建XMLConfigBuilder
2.XMLConfigBuilder解析核心配置文件,并创建XMLMapperBuilder
3.XMLMapperBuilder解析Mapper.xml文件,并创建XMLStatmentBuilder
4.XMLStatmentBuilder解析SQL节点,完成configuration对象的初始化
代理封装阶段
核心成员
门面SqlSession
桥梁Binding包
MapperRegistry
MapperProxyFactory
MapperProxy
MapperMethod
SqlCommand
MethodSignature
ParamNameResolver
数据访问阶段
0 条评论
下一页