MyBatis源码结构
2018-02-28 12:09:33 515 举报
AI智能生成
MyBatis源码结构分为三层:接口层、核心处理层和基础支撑层。接口层定义了与数据库交互的SQL语句,核心处理层实现了SQL语句的解析、映射和执行,基础支撑层提供了数据源、事务管理等通用功能。MyBatis采用工厂模式创建SqlSessionFactory和MapperScannerConfigurer对象,通过配置文件或注解实现SQL语句的配置和映射关系。在执行过程中,MyBatis通过动态代理实现对Mapper接口方法的调用,将参数映射到SQL语句中并执行,最后将结果映射回Java对象返回。MyBatis还支持一级缓存、二级缓存和插件机制,提高了性能和扩展性。
作者其他创作
大纲/内容
<font color="#000000">org.apache.ibatis.</font><b style=""><font color="#f68b1f">annotations</font></b>
包含所有mapper 接口中用到的注解
例如常用的 @Param,@Update、@Select、@Delete 等<br>
<font color="#000000">org.apache.ibatis.</font><b style=""><font color="#f68b1f">binding</font></b>
将mapper 接口绑定配置Mapper语句
<font color="#000000">org.apache.ibatis,</font><b style=""><font color="#f68b1f">builder</font></b>
包含Configuration对象所有构建器,主要包括XML、注解2种方式配置解析
<ul><li>BaseBuilder 构建器基类<br></li><li>XMLConfigBuilder 解析configuration.xml配置文件<br></li><li>XMLMapperBuilder 解析Mapper.xml配置文件<br></li><li>XMLStatementBuilder 解析elect\update\delete 标签<br></li><li>MapperAnnotationBuilder 注解式Mapper<br></li></ul>
<font color="#000000">org.apache.ibatis.</font><font color="#f68b1f"><b>cache</b></font>
<font color="#000000">org.apache.ibatis.</font><font color="#f68b1f"><b>cache</b></font>
缓存功能实现、包含各种缓存装饰器
TransactionalCache 二级缓存功能实现
<font color="#000000">org.apache.ibatis.</font><font color="#f68b1f"><b>cursor</b></font>
实现游标的方式查询数据、游标非常适合处理百万级别的数据查询,通常情况下不适合一次性加载到内存中<br>这种方式类似使用SAX解析XML文件
<font color="#000000">org.apache.ibatis.</font><font color="#f68b1f"><b>datasource</b></font>
数据源 包括jndi数据源、连接池功能
<b><font color="#000000">org.apache.ibatis.</font><font color="#f68b1f">executor</font></b>
<b><font color="#f15a23">包含SQL语句执行器,核心功能包</font></b><br>
功能包括:<br>主键生成功能<br>执行参数解析功能<br>执行结果集解析功能<br>SQL执行器<br>缓存执行器<br>
ErrorContext 错误上下文对象,跟踪所有执行流程
<font color="#000000">org.apache.ibatis.</font><font color="#f68b1f"><b>exceptions</b></font>
框架异常,常见异常:TooManyResultsException
<font color="#000000">org.apache.ibatis.</font><font color="#f68b1f"><b>io</b></font>
资源文件读取
<font color="#000000">org.apache.ibatis.</font><font color="#f68b1f"><b>jdbc</b></font>
JDBC一些操作
SqlRunner SQL执行<br>ScriptRunner 脚本执行,可以执行建库语句,在执行测试用例时候用的非常多<br>
<font color="#000000">org.apache.ibatis.</font><font color="#f68b1f"><b>lang</b></font>
这个包只有2个注解 @UsesJava7 @UsesJava8 使用这个两个注解标识哪些可以使用JDK7 API 哪些可以使用JDK8 API
org.apache.ibatis.<b><font color="#f68b1f">logging</font></b><br>
日志功能,实现多种日志框架的对接
org.apache.ibatis.logging.jdbc 代理所有功能JDBC 操作,实现了在debug模式下能够输出SQL
<font color="#000000">org.apache.ibatis.</font><font color="#f68b1f"><b>mapping</b></font>
配置文件与实体对象的映射功能,Mapper映射、参数映射、结果映射等
<font color="#000000">org.apache.ibatis.</font><font color="#f68b1f"><b>parsing</b></font>
解析工具包
GenericTokenParser:解析#{} ${} 这种占位符<br>XPathParser:XPath形式解析XML<br>PropertyParser: properties解析器<br>
<font color="#000000">org.apache.ibatis.</font><font color="#f68b1f"><b>plugin</b></font>
拦截器功能实现,使用代理模式实现拦截
<font color="#000000">org.apache.ibatis.</font><font color="#f68b1f"><b>reflection</b></font>
反射器功能,这个包下实现元数据编程
通过把Java对象转换成 元数据对象MetaObject,然后就可以对元数据对象进行赋值操作,数据库查询结果到Java对象映射就是通过元对象实现
<font color="#000000">org.apache.ibatis</font>.<font color="#f68b1f"><b>scripting</b></font>
动态SQL语言实现,配置文件中<if><if></if> <where> <set> <foreach><foreach></foreach> <choose> 功能就是在这个包实现,借<b>助</b>OGNL表达式<br>你也可以扩展自己的语言实现功能
<font color="#000000">org.apache.ibatis</font>.<font color="#f68b1f"><b>session</b></font>
<b><font color="#f15a23">主要实现SqlSession功能,非常核心包</font></b><br>
官方注释:SqlSession包含了MyBatis工作的所有的Java接口,通过这些接口你可以 执行SQL命令(insert\delete\update\select),获取Mapper,管理实务
<font color="#000000">org.apache.ibatis.</font><font color="#f68b1f"><b>transaction</b></font>
事务功能实现,包装了数据库连接,处理数据库连接生命周期包括:连接创建,预编译,提交\回滚和关闭
<font color="#000000">org.apache.ibatis</font>.<b><font color="#f68b1f">type</font></b>
类型处理器,包括所有数据库类型对应Java类型的处理器,如果要实现自己类型处理器就需要实现包下的基础接口
0 条评论
下一页