文档章节

mybatis源码总结

飓风2000
 飓风2000
发布于 02/19 17:57
字数 470
阅读 6
收藏 0

mybatis总结两个维度基础概念:
一、流程思路
1.初始化mybatis,读取spring配置,初始化mybatis的入口类SqlSessionFactoryBean(数据源、mapper.xml文件路径、configuration文件路径)
2.初始化mybatis,读取mybatis配置,初始化核心数据结构类Configuration(读取mybatis的配置文件、Environment配置信息、Mapper.xml配置文件)
3.定义Dao,所有Dao需要继承SqlSessionDaoSupport,并且要注入SqlSessionFactory,以便Dao可以得到session进行数据库操作
4.使用Dao,关注两个参数(statement句柄和入参),statement句柄的作用是从Configuration中找到MappedStatement,入参是要给MappedStatement构造sql语句
5.执行sql语句,按照resultType或者resultMap处理数据库操作结果resultSet

二、对象细节
(一)Configuration
1.保存setting信息
2.保存Environment信息(TransactionFactory【SpringManagedTransactionFactory】和DataSource)
3.保存mapperRegistry信息
4.保存mappedStatements信息

(二)SqlSessionFactoryBean
1.SqlSessionFactoryBean实现了Spring的FactoryBean<T>,InitializingBean, ApplicationListener
2.在InitializingBean的afterPropertiesSet方法中构造SqlSessionFactory的默认DefaultSqlSessionFactory对象,该对象中保存了Configuration对象

(三)SqlSessionDaoSupport对象
所有Dao的父类,可以得到SqlSession。在实例化Dao的时候需要注入SqlSessionFactory对象。

(四)SqlSessionFactory对象
用来生产SqlSession对象,openSession和Configuration

(五)DefaultSqlSession对象
包含Configuration,Executor,autoCommit,Configuration用于得到各种信息数据,Executor也是通过Configuration创建的
SimpleExecutor和BaseExecutor是Executor的实现,Executor包装的是Transaction对象
ManagedTransaction是Transaction的实现,他包装的是Connection和Connection的提交和回滚

(六)MappedStatement对象
重要的是statementId,通过mapper.xml解析得到,被保存在Configuration对象中

(七)XMLScriptBuilder和NodeHandler
sql语句xml文件解析


三、深入分析....待续

 

© 著作权归作者所有

共有 人打赏支持
飓风2000
粉丝 38
博文 336
码字总数 136285
作品 0
浦东
高级程序员
私信 提问
现在往后的方向如何规划

1年前换了环境,现在总结下做的内容(JAVA开发) (1)目前除了负责本身的项目外,自己还会多看公司的工具基础包,至少掌握了65%左右的内容并在自己本地的项目进行使用和对比,现在看源码根据...

猫神
2017/10/10
78
1
自己手写一个Mybatis框架(简化)

继上一篇手写SpringMVC之后,我最近趁热打铁,研究了一下Mybatis。MyBatis框架的核心功能其实不难,无非就是动态代理和jdbc的操作,难的是写出来可扩展,高内聚,低耦合的规范的代码。本文完...

我叫刘半仙
2018/03/07
0
3
mybatis源码(1) -- 如何在Spring中驰骋的

mybatis作为持久层流行框架已经被很多产品使用,当然为了接入Spring这个业内的另一个流行框架,mybatis还是做了些事,通过分析除了明白支持Spring的机制原理还了解Spring对持久层接入留了那些...

alexqdjay
2016/10/10
132
0
聊聊 MyBatis 缓存机制

前言 MyBatis是常见的Java数据库访问层框架。在日常工作中,开发人员多数情况下是使用MyBatis的默认缓存配置,但是MyBatis缓存机制有一些不足之处,在使用中容易引起脏数据,形成一些潜在的隐...

鉴客
2018/05/14
2.1K
3
Mybatis一级缓存、二级缓存

以下内容来自美团技术博客:聊聊MyBatis缓存机制 前言 MyBatis是常见的Java数据库访问层框架。在日常工作中,开发人员多数情况下是使用MyBatis的默认缓存配置,但是MyBatis缓存机制有一些不足...

为了美好的明天
2018/05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JeeSite4.x 消息管理、消息推送、消息提醒

实现统一的消息推送接口,包含PC消息、短信消息、邮件消息、微信消息等,无需让所有开发者了解消息是怎么发送出去的,只需了解消息发送接口即可。 所有推送消息均通过 MsgPushUtils 工具类发...

ThinkGem
7分钟前
0
0
OpenML

https://www.openml.org/search?type=data

shengjuntu
9分钟前
0
0
java强引用,软引用,弱引用和虚引用

先来简要说一下这四种引用的特性: 强引用:如果一个对象具有强引用,那垃圾回收器绝不会回收它 软引用:如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它 弱引用:在垃圾...

woshixin
13分钟前
0
0
dubbo服务在kubernetes中对外暴露服务

一些场景下,在开发时可能存在dubbo consumer需要访问k8s中部署的dubbo provider,尤其是对于自建的kubernetes集群环境,tcp的端口很难代理,这就导致了开发发链接集群内的服务比较麻烦,这里...

上官胡闹
23分钟前
0
0
Java获取小程序带参二维码(太阳码)

获取小程序码 官方API地址 : https://developers.weixin.qq.com/miniprogram/dev/api/qrcode.html 首先使用官方提供的 接口B:适用于需要的码数量极多的业务场景 https://api.weixin.qq.com/...

回忆是如此忧伤
30分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部