日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Mybatis源码学习笔记

發布時間:2023/12/10 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.DefaultSqlSessionFactory

2. 執行器進行初始化 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源码学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。