Mybatis源码学习笔记
Mybatis核心概念:
?
Configuration : 管理 mysql-config.xml 全局配置關(guān)系類
SqlSessionFactory: Session 管理工廠接口
Session:? SqlSession 是一個(gè)面向用戶(程序員)的接口。SqlSession 中提供了很多操作數(shù)據(jù)庫的方法
Executor :? 執(zhí)行器是一個(gè)接口(基本執(zhí)行器、緩存執(zhí)行器)。 作用:SqlSession 內(nèi)部通過執(zhí)行器操作數(shù)據(jù)庫
MappedStatement: 底層封裝對(duì)象 。作用:對(duì)操作數(shù)據(jù)庫存儲(chǔ)封裝,包括 sql 語句、輸入輸出參數(shù)
StatementHandler :具體操作數(shù)據(jù)庫相關(guān)的 handler 接口
ResultSetHandler :具體操作數(shù)據(jù)庫返回結(jié)果的 handler 接口
?
Debug代碼執(zhí)行順序:
入口代碼:
String resource = "mybatis-config.xml";//獲取源配置文件InputStream inputStream = Resources.getResourceAsStream(resource);//獲取sqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//獲取sessionSqlSession sqlSession = sqlSessionFactory.openSession();//操作數(shù)據(jù)庫User user = sqlSession.selectOne("com.jiagouedu.mybatis.UserMapper.selectUser", 1);?1. 解析xml文件變成Configuration 返回SqlSessionFactory
org.apache.ibatis.session.SqlSessionFactoryBuilder.build(java.io.InputStream)>org.apache.ibatis.builder.xml.XMLConfigBuilder 構(gòu)造函數(shù)>org.apache.ibatis.builder.xml.XMLConfigBuilder.parse>org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration mybatis-config.xml內(nèi)容>org.apache.ibatis.parsing.XPathParser.evaluate>org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement>org.apache.ibatis.session.SqlSessionFactoryBuilder.build(org.apache.ibatis.session.Configuration)>org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.DefaultSqlSessionFactory2. 執(zhí)行器進(jìn)行初始化 SimpleExecutor拿到SqlSession
org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSession()>org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromDataSource>org.apache.ibatis.transaction.TransactionFactory.newTransaction(javax.sql.DataSource, org.apache.ibatis.session.TransactionIsolationLevel, boolean)>org.apache.ibatis.session.Configuration.newExecutor(org.apache.ibatis.transaction.Transaction, org.apache.ibatis.session.ExecutorType)>org.apache.ibatis.executor.SimpleExecutor>org.apache.ibatis.executor.CachingExecutor 一級(jí)緩存 自動(dòng)>org.apache.ibatis.plugin.InterceptorChain.pluginAll 責(zé)任鏈模式攔截器3.操作數(shù)據(jù)庫
org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(java.lang.String, java.lang.Object)>org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(java.lang.String, java.lang.Object)>org.apache.ibatis.session.Configuration.getMappedStatement(java.lang.String)>org.apache.ibatis.executor.CachingExecutor.query(org.apache.ibatis.mapping.MappedStatement, java.lang.Object, org.apache.ibatis.session.RowBounds, org.apache.ibatis.session.ResultHandler)>org.apache.ibatis.executor.CachingExecutor.createCacheKey 緩存的key>org.apache.ibatis.executor.CachingExecutor.query(org.apache.ibatis.mapping.MappedStatement, java.lang.Object, org.apache.ibatis.session.RowBounds, org.apache.ibatis.session.ResultHandler, org.apache.ibatis.cache.CacheKey, org.apache.ibatis.mapping.BoundSql)>org.apache.ibatis.executor.BaseExecutor.queryFromDatabase>org.apache.ibatis.executor.BaseExecutor.doQuery>org.apache.ibatis.executor.statement.PreparedStatementHandler.query>org.apache.ibatis.executor.resultset.ResultSetHandler.handleResultSets>org.apache.ibatis.executor.resultset.DefaultResultSetHandler?
?以下是代碼執(zhí)行流程圖:
?seesion的獲取:
Mapper對(duì)象的獲取:
?
執(zhí)行器Executor:
BaseExecutor用到的是規(guī)范的理念,使實(shí)現(xiàn)這個(gè)接口的類都按照這個(gè)規(guī)范去做對(duì)應(yīng)的事情.
?
Mybatis中用到的設(shè)計(jì)模式:
1.sqlSessionFactory 工廠
2. build 建造者
3. getInstance ,Cache 單例
4. 委派 裝飾
5.InterceptorChain 責(zé)任鏈
6 Proxy 代理
7. Execute Command 命令
8.doQuery 模板
?
總結(jié)
以上是生活随笔為你收集整理的Mybatis源码学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript 将table导出
- 下一篇: AWS网络架构图