Mybatis源码分析
Mybatis源码的深入分析,揭开她的面纱。
Lucare
风能吹走纸张却吹不走蝴蝶,生命的力量在于不顺从!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Mybatis源码分析(1)—— Mapper文件解析
感觉优快云对markdown的支持不够友好,总是伴随各种问题,很恼火!xxMapper.xml的解析主要由XMLMapperBuilder类完成,parse方法来完成解析: public void parse() { if (!configuration.isResourceLoaded(resource)) { configurationElement(par...原创 2018-03-01 21:41:42 · 742 阅读 · 0 评论 -
Mybatis 源码分析(2)—— 参数处理
Mybatis对参数的处理是值得推敲的,不然在使用的过程中对发生的一系列错误直接懵逼了。以前遇到参数绑定相关的错误我就是直接给加@param注解,也稀里糊涂地解决了,但是后来遇到了一些问题推翻了我的假设:单个参数不需要使用 @param 。由此产生了一个疑问,Mybatis到底是怎么处理参数的?几种常见的情景:单个参数不使用注解,基于${}和#{}的引用,基本类型和自定义对象都可以...原创 2018-03-06 22:17:08 · 3844 阅读 · 0 评论 -
Mybatis源码分析(3)—— 从Mybatis的视角去看Bean的初始化流程
不涉及Spring完整的启动流程,仅仅从Mybatis的视角去分析几个关键的方法,找到Mybatis是如何通过这几个扩展点植入进去的,反过来看Spring是如何设计,埋下这些伏笔,实现其可扩展性。springContext-mybatis.xml的配置:<!-- simplest possible SqlSessionFactory configuration -->&l...原创 2018-03-08 21:41:34 · 934 阅读 · 0 评论 -
Mybatis源码分析(4)—— Mapper的创建和获取
Mybatis我们一般都是和Spring一起使用的,它们是怎么融合到一起的,又各自发挥了什么作用?就拿这个Mapper来说,我们定义了一个接口,声明了一个方法,然后对应的xml写了这个sql语句, 它怎么就执行成功了?这家伙是怎么实现的,带着这个好奇心,我一步步跟踪,慢慢揭开了它的面纱。一、初始化时的埋点MapperFactoryBean的父类SqlSessionDaoSuppor...原创 2018-04-01 11:22:10 · 1577 阅读 · 0 评论 -
Mybatis源码分析(5)—— 插件的原理
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,可以使用插件来拦截的方法调用包括:Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)ParameterHandler (getParameterObject, setParam...原创 2018-04-08 21:00:27 · 346 阅读 · 0 评论 -
Mybatis源码分析(6)—— 从JDBC看Mybatis的设计
Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。六步流程:加载驱动(5.x驱动包不需要这步了)建立连接创建Statement执行SQL语句获取结果集关闭资源这里只取后面几步分析下,基本上都是从Executor开始。De...原创 2018-04-15 12:07:55 · 582 阅读 · 0 评论 -
Mybatis源码分析(7)—— 结果集处理
解析封装ResultMap 是和结果集相关的东西,最初在解析 XML 的时候,于 parseStatementNode 方法中,针对每一个 select 节点进行解析,转换为 MappedStatement(类似 Spring 的 bean 配置和 BeanDefinition 的关系)。在 MapperBuilderAssistant 的 addMappedStatement 方法中,...原创 2018-04-21 18:01:20 · 2870 阅读 · 0 评论 -
Mybatis 源码分析(8)—— 一二级缓存
一级缓存其实关于 Mybatis 的一级缓存是比较抽象的,并没有什么特别的配置,都是在代码中体现出来的。当调用 Configuration 的 newExecutor 方法来创建 executor:public Executor newExecutor(Transaction transaction, ExecutorType executorType, boolean autoC...原创 2018-05-05 18:22:26 · 434 阅读 · 1 评论 -
Mybatis 源码分析(9)—— 事物管理
Mybatis 提供了事物的顶层接口:public interface Transaction { /** * Retrieve inner database connection * @return DataBase connection * @throws SQLException */ Connection getConnection() throw...原创 2018-05-11 18:08:47 · 458 阅读 · 0 评论