Mybatis3源码分析(22)-总结
2015-12-29 13:18
676 查看
Configuration加载过程
Configuration组成
基本属性。在mybatis-config.xml加载的属性这里定义为基本属性。如cacheEnabled/variables/objectFactory等等,这些的加载都比较简单。cache缓存。这个是从mapper配置文件加载的。一个命名空间对应一个缓存。
resultMap。结果集映射,从mapper配置文件中的resultMap节点加载。
mappedStatement。Sql语句的定义。从mapper配置文件中的select/update/insert/delete节点加载。
之所以将cache/resultMap/mapperStatement单独分开,是因为我们在配置mybatis中主要使用的就是这三个配置。
Configuration加载
XMLConfigBuilder读取mybatis-config.xml文件,解析内容并加载到configuration中基本属性中。XMLMapperBuilder读取Mapper配置文件,解析得到配置内容。如果是加载Mapper接口的话由MapperAnnotationBuilder从注解里解析配置内容。
MapperBuilderAssistant利用XMLMapperBulider/XMLAnnotationBuilder解析到的配置构建Cache/ResultMap/MappedStatement对象并加载到Configuration中。
SQL执行过程
主要对象
Mybatis在SqlSession接口中提供了访问数据库的基本操作。如select/update/insert/delete/commit/rollback/close。SqlSession有一个默认的实现DefaultSqlSession在DefaultSqlSession中有一个Executor对象,对象数据的操作都是由这个Executor来完成。Executor中有三个对象来帮助他完成MappedStatement的执行工作。
StatementHandler负责从连接中获取一个Statement对象
ParameterHandler负责对Statement设置参数
ResultHandler负责生成查询语句的结果集
主要过程
DefaultSqlSession根据id在configuration中找到MappedStatement对象(要执行的语句)Executor调用MappedStatement对象的getBoundSql得到可执行的sql和参数列表
StatementHandler根据Sql生成一个Statement
ParameterHandler为Statement设置相应的参数
Executor中执行sql语句
如果是更新(update/insert/delete)语句,sql的执行工作得此结束
如果是查询语句,ResultSetHandler再根据执行结果生成ResultMap相应的对象返回。
Mybatis使用到的主要的设计模式
装饰模式。在实现Executor、Cache等接口时,Mybatis都使用了装饰模式。模板模式。在看过很多框架的源都使用了这种模式。模板模式将面向对象的特性发挥到了极致。
外观模式。外观模式提供了统一的接口给客户端使用。为以后的系统或功能扩展提供了便利性。
以上三种设计是Mybatis中非常重要的设计模式,我们应该了解并深入研究,在实际应用中使用。
其他
Mybatis用jdk的动态代理实现了拦截器和Mapper接口。这种动态代理和注解的运用也是非常值得学习的。SqlSession在一个生命周期中会产生大量的临时对象,如:Executor、Transaction、Cache、MetaObject、StatementHandler、ParameterHandler、ResultSetHandler等待。但是SqlSession的生命周期是非常短的。这样造成大量对象的产生,给JVM的GC工作带来了很多的消耗,这个应该是Mybatis比较大的缺点了。
相关文章推荐
- jdbc中的Statement和PreparedStatement接口对象
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 从源码安装Mysql/Percona 5.5
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- SQL中的三值逻辑
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序