Mybatis源码学习笔记
生活随笔
收集整理的這篇文章主要介紹了
Mybatis源码学习笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Mybatis核心概念:
?
Configuration : 管理 mysql-config.xml 全局配置關系類
SqlSessionFactory: Session 管理工廠接口
Session:? SqlSession 是一個面向用戶(程序員)的接口。SqlSession 中提供了很多操作數據庫的方法
Executor :? 執行器是一個接口(基本執行器、緩存執行器)。 作用:SqlSession 內部通過執行器操作數據庫
MappedStatement: 底層封裝對象 。作用:對操作數據庫存儲封裝,包括 sql 語句、輸入輸出參數
StatementHandler :具體操作數據庫相關的 handler 接口
ResultSetHandler :具體操作數據庫返回結果的 handler 接口
?
Debug代碼執行順序:
入口代碼:
String resource = "mybatis-config.xml";//獲取源配置文件InputStream inputStream = Resources.getResourceAsStream(resource);//獲取sqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//獲取sessionSqlSession sqlSession = sqlSessionFactory.openSession();//操作數據庫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 構造函數>org.apache.ibatis.builder.xml.XMLConfigBuilder.parse>org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration mybatis-config.xml內容>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. 執行器進行初始化 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 一級緩存 自動>org.apache.ibatis.plugin.InterceptorChain.pluginAll 責任鏈模式攔截器3.操作數據庫
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?
?以下是代碼執行流程圖:
?seesion的獲取:
Mapper對象的獲取:
?
執行器Executor:
BaseExecutor用到的是規范的理念,使實現這個接口的類都按照這個規范去做對應的事情.
?
Mybatis中用到的設計模式:
1.sqlSessionFactory 工廠
2. build 建造者
3. getInstance ,Cache 單例
4. 委派 裝飾
5.InterceptorChain 責任鏈
6 Proxy 代理
7. Execute Command 命令
8.doQuery 模板
?
總結
以上是生活随笔為你收集整理的Mybatis源码学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript 将table导出
- 下一篇: C#实现GDI+基本图的缩放、拖拽、移动