一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - MyBatis源碼淺析(一)開(kāi)篇

MyBatis源碼淺析(一)開(kāi)篇

2020-07-04 10:50李新杰 JAVA教程

源碼的學(xué)習(xí)好處多多,Mybatis源碼量少、邏輯簡(jiǎn)單。下面將通過(guò)本文給大家詳解,低mybatis源碼淺析感興趣的朋友一起看看吧

源碼學(xué)習(xí)的好處不用多說(shuō),Mybatis源碼量少、邏輯簡(jiǎn)單,將寫(xiě)個(gè)系列文章來(lái)學(xué)習(xí)。

SqlSession

Mybatis的使用入口位于org.apache.ibatis.session包中的SqlSession,發(fā)現(xiàn)它是個(gè)接口,必然有個(gè)默認(rèn)實(shí)現(xiàn)類(lèi)org.apache.ibatis.session.defaults包中的DefaultSqlSession。我們從來(lái)沒(méi)有new過(guò)這個(gè)類(lèi),按照J(rèn)ava慣例使用SqlSessionFactory里的工廠方法。發(fā)現(xiàn)它也是個(gè)接口,必然有默認(rèn)實(shí)現(xiàn)類(lèi)DefaultSqlSessionFactory。該類(lèi)依然不用自己創(chuàng)建,使用SqlSessionFactoryBuilder里的工廠方法。

DefaultSqlSession

DefaultSqlSession里主要方法:

1)Cursor<T> selectCursor(String statement, Object parameter, RowBounds rowBounds),委托給executor.queryCursor(ms, wrapCollection(parameter), rowBounds)。

2)List<E> selectList(String statement, Object parameter, RowBounds rowBounds)和void select(String statement, Object parameter, RowBounds rowBounds, ResultHandler handler),委托給executor.query(ms, wrapCollection(parameter), rowBounds, handler)。

3)int update(String statement, Object parameter),委托給executor.update(ms, wrapCollection(parameter))。
可見(jiàn),最終都有executor來(lái)完成。

Executor

Executor位于org.apache.ibatis.executor包中,是個(gè)接口,實(shí)現(xiàn)類(lèi)是BaseExecutor和CachingExecutor。其中BaseExecutor是抽象的,有三個(gè)子類(lèi)SimpleExecutor、ReuseExecutor和BatchExecutor,見(jiàn)名知意。BaseExecutor里主要方法:

1)List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey key, BoundSql boundSql)和List<E> queryFromDatabase(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey key, BoundSql boundSql),委托為抽象的abstract <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql)。

2)Cursor<E> queryCursor(MappedStatement ms, Object parameter, RowBounds rowBounds),委托給抽象的abstract <E> Cursor<E> doQueryCursor(MappedStatement ms, Object parameter, RowBounds rowBounds, BoundSql boundSql)。

3)int update(MappedStatement ms, Object parameter),委托給抽象的abstract int doUpdate(MappedStatement ms, Object parameter)。

基類(lèi)處理公共部分,具體留給子類(lèi)實(shí)現(xiàn)。

再看下SimpleExecutor里的主要方法:

1)List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql),委托給handler.<E>query(stmt, resultHandler)。

2)Cursor<E> doQueryCursor(MappedStatement ms, Object parameter, RowBounds rowBounds, BoundSql boundSql),委托給handler.<E>queryCursor(stmt)。

3)int doUpdate(MappedStatement ms, Object parameter),委托給handler.update(stmt)。

可見(jiàn),最終由handler來(lái)處理。

StatementHandler

StatementHandler位于org.apache.ibatis.executor.statement包中,是個(gè)接口,實(shí)現(xiàn)類(lèi)是BaseStatementHandler和RoutingStatementHandler。BaseStatementHandler是抽象的,有三個(gè)子類(lèi)SimpleStatementHandler、PreparedStatementHandler和CallableStatementHandler。這三個(gè)應(yīng)該比較熟悉,分別處理不帶參數(shù)的sql語(yǔ)句、參數(shù)化sql語(yǔ)句和存儲(chǔ)過(guò)程。再看SimpleStatementHandler里的主要方法:

1)List<E> query(Statement statement, ResultHandler resultHandler),委托給statement.execute(sql)。

2)Cursor<E> queryCursor(Statement statement),委托給statement.execute(sql)。

3)int update(Statement statement),委托給statement.execute(sql)。

最終由statement執(zhí)行sql。這就回到了java.sql包了。

Mybatis主要完成對(duì)sql參數(shù)的封裝處理、結(jié)果集的獲取并生成對(duì)象,而把sql語(yǔ)句的構(gòu)建過(guò)程留給用戶(hù)。Mybatis的作者故意這樣設(shè)計(jì)的。雖然框架從整體來(lái)看是半自動(dòng)的,但靈活性卻得到了極大增加。

原文鏈接:http://www.cnblogs.com/lixinjie/archive/2016/11/10/mybatis-src-01-beginning.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久日本片精品AAAAA国产 | 国产麻豆精品免费视频 | 男人的天堂久久精品激情a 男人的天堂va | 国产麻豆成91 | 亚洲AV无码国产精品色在线看 | 天天爱综合 | 亚洲无限观看 | 国产精品自产拍在线观看2019 | 免费一级片在线观看 | 王淑兰李思雨李铁柱乡村小说免费 | 亚洲国产情侣偷自在线二页 | 九九国产视频 | 亚洲国产情侣偷自在线二页 | 欧美同志video 在线观看 | 456亚洲人成高清在线 | 男人在线网址 | 久久视频这只精品99re6 | 精品蜜臀AV在线天堂 | 国产自产2023最新麻豆 | 日韩免费一级毛片 | 四虎新网址| 99在线在线视频免费视频观看 | 闺蜜的样子小说安沁在线阅读 | 免费亚洲视频 | 色姑娘导航 | 小寡妇好紧进去了好大看视频 | 免费观看欧美一级高清 | evelynlin亚裔播放 | 欧美性xxxxx| 日韩色图区| 色狠狠成人综合网 | 国产91在线精品 | 久久精品国产在热亚洲 | 四虎影在线永久免费观看 | 日本成人高清视频 | 手机在线伦理片 | 幸福草电视剧演员表介绍 | 亚洲 日韩经典 中文字幕 | 亚洲欧美综合人成野草 | 93版高校教师 | 全彩成人18h漫画 |