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