mybatis 3.4.4 学习笔记
来源:互联网 发布:模拟退火算法原理 编辑:程序博客网 时间:2024/06/05 20:01
mybatis 3.4.4 学习笔记
概述
- 参考
- http://www.imooc.com/article/1291
- http://www.jianshu.com/p/a341bae7fcfc
- http://www.cnblogs.com/sin90lzc/archive/2012/06/30/2571175.html
- http://wiki.jikexueyuan.com/project/mybatis-in-action/interface-programming.html
SqlSessionFactoryBuilder—->mybatis入口
- 利用配置文件解析SqlSessionFactory对象
解析配置文件—->将配置文件(eg:mybatis.xml)与Mapper文件(eg:UserMapping.xml)解析成相应的Java对象
解析configuration为Configuration—->获取通用属性/配置/插件/类型处理等
- XMLConfigBuilder#parseConfiguration—->解析配置在配置文件中的元素
- settings/typeAliases/plugins/objectFactory/objectWrapperFactory/reflectorFactory/databaseIdProvider/typeHandlers
- properties—->解析properties元素下配置的name/value构成一个property
- 同时支持resource/url配置的属性,将所有解析属性置于Configuration的variables,供后续使用
- environments—->获取指定environment的dataSource/transactionManager
- mapperElement(root.evalNode(“mappers”))—->以XMLMapperBuilder解析mapper元素为MappedStatement
- 重要属性
- MapperRegistry mapperRegistry—->存放以mapper类型为key,其MapperProxyFactory为value的Map
- Map String, MappedStatement mappedStatements—->以namespace.id为key,MappedStatement存放的Map,可直接通过合成id调用执行
解析mapper为MappedStatement—->解析定义的mapper文件
- XMLMapperBuilder#parse
- 解析namespace参数
- 解析cache-ref/cache/resultMap/sql/select|insert|update|delete元素配置
- 解析resultMap
- 解析id/type属性,以及旗下result元素的column/property等元素,合成ResultMapping对象,最终合成ResultMap对象
- 解析sql
- 将sql片段以namespace.id形式为key,XNode为value存放于sqlFragments
- 解析select|insert|update|delete
- 将配置的id/parameterType/resultMap/resultType/statementType(默认为PREPARED)/sqlCommandType/sqlSource,合成MappedStatement对象
- 解析sqlSource对象,利用XMLLanguageDriver#createSqlSource,委托XMLScriptBuilder#parseScriptNode,
- 根据sql内容中是否有${}创建DynamicSqlSource还是RawSqlSource
接口请求/执行/结果返回—->利用DefaultSqlSessionFactory对象创建SqlSession,调用namespace.id合成的语句,进行参数解析,请求语句执行,结果返回解析
创建SqlSession
- DefaultSqlSessionFactory#openSession
- 利用之前解析出来的configuration/executor(默认创建SimpleExecutor执行器)/autoCommit(默认为false)创建DefaultSqlSession
接口参数解析/接口执行/接口结果解析
- DefaultSqlSession#selectOne(java.lang.String, java.lang.Object)—->namespace.id方式进行调用
- DefaultSqlSession#selectList(java.lang.String, java.lang.Object, org.apache.ibatis.session.RowBounds)
- 从configuration的mappedStatements中以namespace.id找到之前解析出来的MappedStatement
- 调用BaseExecutor#query进行boundSql解析,利用之前解析出来的sqlSource对象
- 进行createCacheKey的处理
- 当初始执行,无resultHandler,则进行queryFromDatabase
- 回调子类的SimpleExecutor#doQuery进行真正的参数解析/语句执行/结果解析
- 默认创建PreparedStatementHandler语句处理器
- PreparedStatementHandler#parameterize进行参数化等处理,委托给DefaultParameterHandler#setParameters进行参数化处理
- PreparedStatementHandler#query—->语句执行
- 委托DefaultResultSetHandler#handleResultSets进行结果的映射处理
- DefaultSqlSession#selectList(java.lang.String, java.lang.Object, org.apache.ibatis.session.RowBounds)
- DefaultSqlSession#getMapper—->以Mapper接口方式进行调用
- Configuration#getMapper
- MapperRegistry#getMapper
- MapperProxyFactory#newInstance(org.apache.ibatis.session.SqlSession)—->通过工厂类,创建mapperInterface的代理对象
- 当进行mapperInterface的方法调用时,调用代理处理器MapperProxy#invoke进行方法代理转换
- MapperMethod#execute最终经过处理还是会转接调用DefaultSqlSession#selectList之类的方法
- Configuration#getMapper
测试
阅读全文
0 0
- mybatis 3.4.4 学习笔记
- MyBatis学习笔记(4)
- mybatis学习笔记(4)-开发dao方法
- mybatis 学习笔记
- MyBatis学习笔记
- mybatis学习笔记---入门
- MyBatis 学习笔记
- Mybatis学习笔记
- 【MyBatis学习笔记】系列
- Mybatis学习笔记
- mybatis学习笔记
- mybatis学习笔记
- MyBatis 学习笔记
- mybatis学习笔记
- mybatis学习笔记
- MyBatis学习笔记
- mybatis学习笔记
- Mybatis框架学习笔记
- Jenkins安装+配置Git +Maven的自动化构建(中)
- redis-list常用命令
- Java类与对象的基本概念
- INSERT INTO SELECT 表复制语句
- java萌新的成长之路–linux系统的安装
- mybatis 3.4.4 学习笔记
- Python爬虫抓取去哪儿网景点信息告诉你国庆哪儿最堵
- Unity SDK 资料
- Ubuntu安装Qt教程
- poj3687 Labeling Balls
- Spring Microservices in Action-Manning(2017) 读书笔记(```里的xml为什么不能显示为缩进?Markdown的bug??)
- lombok的安装和使用
- ionic cordova platform add android长时间没响应,又不报错
- jboss设置web应用的context root