一圖讀懂mybatis查詢接口的源碼流程-創(chuàng)新互聯(lián)

請(qǐng)?zhí)砑訄D片描述

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到城步網(wǎng)站設(shè)計(jì)與城步網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國(guó)際域名空間、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋城步地區(qū)。

圖比較大:如果看著比較糊的話,可以下載高清圖:https://download.csdn.net/download/langwuzhe/87376216

第一步:創(chuàng)建 StatementHandler、ParameterHandler、ResultSetHandler-----------(三劍客的新生)
  1. 創(chuàng)建StatementHandler對(duì)象
    • 具體創(chuàng)建的實(shí)現(xiàn)類是PreparedStatementHandler,而且被RoutingStatementHandler包裹,便于識(shí)別具體的StatementHandler對(duì)象。
  2. 在創(chuàng)建 StatementHandler 對(duì)象時(shí),會(huì)同時(shí)super()父類BaseStatementHandler的構(gòu)造器。BaseStatementHandler構(gòu)造器會(huì)把ParameterHandler、ResultSetHandler都創(chuàng)建出來(lái)
    • ParameterHandler 、ResultSetHandler 這兩個(gè)Handler 是在StatementHandler的實(shí)現(xiàn)類中創(chuàng)建出來(lái)的,所以當(dāng)要調(diào)用 這兩個(gè)Handler 的方法時(shí)需要去 StatementHandler 的實(shí)現(xiàn)中尋找這兩個(gè)Hander 的引用。所以就會(huì)看見上圖中 設(shè)置參數(shù) 和 整理數(shù)據(jù)庫(kù)返回?cái)?shù)據(jù)時(shí)依然會(huì)看見需要經(jīng)過(guò) StatementHandler的實(shí)現(xiàn)類PrepareStatementHandler
第二步:執(zhí)行 connection.prepareStatement,返回 statement 對(duì)象---------(StatementHandler)
  1. 經(jīng)過(guò)一系列流轉(zhuǎn),具體是在 StatementHandler 的實(shí)現(xiàn)類中執(zhí)行的connection.prepareStatement
  2. connection.prepareStatement(sql)時(shí),由于connection 對(duì)象被種了動(dòng)態(tài)代理的蠱。所以執(zhí)行connection.prepareStatement(sql)時(shí),會(huì)先進(jìn)入 connection的代理對(duì)象 ConnectionLogger中執(zhí)行invoke方法打印sql日志
第三步:往sql中設(shè)置參數(shù)。具體值 替換 ? 問(wèn)號(hào) -------------- (ParameterHandler)
  1. 把第二步的statement對(duì)象傳出來(lái)用來(lái)往sql設(shè)置參數(shù)
  2. 使用具體參數(shù) 替換 ? 問(wèn)號(hào)時(shí),是在ParameterHandler的實(shí)現(xiàn)類DefaultParameterHandler進(jìn)行的
第四步:執(zhí)行 statement.execute() ------------------------(StatementHandler)
  1. 執(zhí)行execute()方法是在 StatementHandler 的實(shí)現(xiàn)類 PreparedStatementHandler 中執(zhí)行的。
  2. 由于PreparedStatement對(duì)象被種了動(dòng)態(tài)代理的蠱,所以執(zhí)行 他的execute()方法,會(huì)先進(jìn)入到PreparedStatement的代理的對(duì)象PreparedStatementLogger打印入?yún)⒌娜罩尽?/mark>
第五步:數(shù)據(jù)庫(kù)返回?cái)?shù)據(jù)結(jié)果映射。---------------------------(ResultSetHandler)
  1. 結(jié)果映射都是在 ResultSetHandler 的實(shí)現(xiàn)類 DefaultResultSetHandler 中進(jìn)行的。

  2. 從 statement中取出ResultSet對(duì)象會(huì)把他放到ResultSetWrapper中,ResultSetWrapper是對(duì)ResultSet的補(bǔ)充增強(qiáng)

  3. 在映射的過(guò)程中,還會(huì)創(chuàng)建 ResultHandler對(duì)象,他的實(shí)現(xiàn)類是DefaultResultHandler。這個(gè)只是方法返回時(shí)攜帶數(shù)據(jù)用的,無(wú)需過(guò)多關(guān)注,但是要區(qū)分ResultSetHandler 和 ResultHandler 長(zhǎng)的很像,容易看花眼。

注:

? 第一、二、三 步 都是在 Executor 中發(fā)生的。第四、五步 是在 StatementHandler 中發(fā)生的。
**

在這里插入圖片描述

另外在我的組件庫(kù)中,對(duì)mybatis源碼進(jìn)行了詳盡的注釋,且可以對(duì)項(xiàng)目進(jìn)行install,然后在ron-man-mybatis1項(xiàng)目中 src/main/java/iron/man/lyf/ironmanmybatis1/run_test/MybatisQuickStart.java 進(jìn)行運(yùn)行 對(duì)mybatis源碼進(jìn)行debug查看運(yùn)行過(guò)程,歡迎大家下載指正。如果您覺(jué)得幫助到您麻煩給個(gè)贊。我的組件庫(kù)

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁(yè)標(biāo)題:一圖讀懂mybatis查詢接口的源碼流程-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://muchs.cn/article26/dpjgjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、外貿(mào)建站、品牌網(wǎng)站制作、用戶體驗(yàn)、企業(yè)建站、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司