成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

看到Mybatis源碼就感到煩躁,怎么辦?

運維 數據庫運維
因為面試的時候,面試官很喜歡問:你看過什么框架源碼?JDK源碼也行。這時候,如果回答沒有看過,雖然沒讓你立馬回去等通知。但也許,你在面試官心中的印象就大打折扣了。

 [[357382]]

背景

最近,聽到很多吐槽:看到源碼,心中就感到十分糾結、特別煩惱。

為什么糾結?

因為面試的時候,面試官很喜歡問:你看過什么框架源碼?JDK源碼也行。

這時候,如果回答沒有看過,雖然沒讓你立馬回去等通知。但也許,你在面試官心中的印象就大打折扣了。

如果回答看過,并且還能較為流利地說上一番,那面試官或許會在心里贊嘆:小伙子可以呀!(PS:很多面試官自己也沒看過,或者看過很多也忘了)。

總之,你要是能說上個123,那給面試官的印象就會杠杠滴好。何愁工作?何愁加薪?

為什么煩?

大部分人的情況是:源碼不是沒有看過,而是每次只看得下一部分。為什么只看得下一部分呢?通常有下面三種原因:

缺乏技術支撐。看源碼是需要技術支撐的,不是隨便一個小白也能看懂的。沒有一些技術支撐,你頂多看看一小段,然后就看不下去,于是就放棄了。

缺乏正確心態。看源碼確實挺無聊的,如果大家心態沒放好,把它當做一種任務去做,肯定覺得無聊,而且很容易放棄。

缺乏足夠時間。確實很忙,經常看了一部分后,天天加班,沒時間看,忙完后又忘了之前正在看的某某源碼。

個人建議

對于一般java程序員來說,閱讀源碼之前到底需要些什么技能呢?

個人建議,以下基礎知識必須會一些:

會設計模式:包括單例模式、工廠模式、代理模式、裝飾器模式、責任鏈模式、模板方法模式等。

會猜測:大膽的猜測,在看源碼的時候,多站在高層次想想,如果你是Mybatis的設計者,你會怎么設計?

會挑重點看:別被沒寫參數校驗、類型校驗等問題卡在那里。

會畫圖:流程圖、類圖等,找一些在線畫圖工具,媒體畫完就保存下來,如果中途一段時間不看了,再回頭看看這些圖,也能快速繼續。

Mybatis源碼分析

今天,我們就來看看Mybatis源碼的閱讀,具體舉個例子來看看:

案例和疑問

從我們最初的demo中開始:

  1. public static void main(String[] args) { 
  2.         String resource = "mybatis-config.xml"
  3.         InputStream inputStream = null
  4.         SqlSession sqlSession = null
  5.         try { 
  6.             inputStream = Resources.getResourceAsStream(resource); 
  7.             SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 
  8.             sqlSession = sqlSessionFactory.openSession();  
  9.             User user = sqlSession.selectOne("com.tian.mybatis.mapper.UserMapper.selectById", 1); 
  10.             System.out.println(user);  
  11.         } catch (Exception e) { 
  12.             e.printStackTrace(); 
  13.         } finally { 
  14.             try { 
  15.                 inputStream.close(); 
  16.             } catch (IOException e) { 
  17.                 e.printStackTrace(); 
  18.             } 
  19.             sqlSession.close(); 
  20.         } 
  21.     } 

關于獲取數據流inputStream,這個我們就不討論了,我們主要關注重點。

對于上面demo,我們可以分成五個步驟:

第一步,創建一個工廠類sqlSessionFactory。

配置文件的解析就是在這里完成的。包括mybatis-config.xml和我們的Mapper.xml映射器文件。這一步我們關心的內容是:解析的時候做了什么?產生了什么對象,解析的結果放在哪里的。因為這將意味著,我們后面使用的時候去哪里獲取這項配置項內容。

第二步,通過SqlSessionFactory創建一個SqlSession。

那么問題來了,SqlSession中定義了各種增刪改查的API,是給客戶端調用,返回的是什么實現類?除了SqlSession以外,我們還創建了什么對象,創建了什么環境?

第三步,獲取到一個Mapper對象。

問題來了UserMapper.java是一個接口,并沒有為它創建實現類,那又是怎么被實例化的呢?我們使用的這個Mapper對象到底是什么對象呢?為什么要從SqlSession里去獲取呢?為什么傳進去一個接口,然后還要用一個接口去接收呢?

第四步,調用接口方法。

問題是我們的接口沒有實現類,為什么就可以直接調用它的方法呢?那它調用的是誰的方法呢?是如何把SQL給關聯起來的呢?是如何獲取到數據的呢?

第五步,關閉相關資源。

開始源碼分析過程

由于涉及到內容較多,下面就用幾張圖來展示整個流程。我們可以通過這幾張圖來快速翻閱Mybatis的源碼。

第一步

  1. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 

這一句代碼的整個流程如下:

根據inputStream,解析配置文件,創建出一個DefaultSqlSessionFactory默認的SqlSessionFactory 實現類。構建出一個工廠類,這個工廠類專門用來創建SqlSession對象的。

第二步

  1. SqlSession  sqlSession = sqlSessionFactory.openSession(); 

獲取SqlSession的整個流程如下:

第三步

  1. User user = sqlSession.selectOne("com.tian.mybatis.mapper.UserMapper.selectById", 1); 

第三步和第四步就是這行代碼畫的。

這一步是返回一個映射器代理類,映射器代理類專門用來給UserMapper接口和UserMapper.xml綁定的代理類。創建出來的代理類就可以實例化了,然后就可以調用UserMapper接口的方了。

第四步:調用代理對象執行SQL的整個過程。

第五步,關閉資源。

希望大家按照這個流程,找點源碼看看。聽別人的看別人永遠是別人的。

動起來吧!

總結

其實,沒什么好總結的。好好領悟一下為什么糾結吧!同時希望能看看我的建議,作為一個過來人,希望能幫助大家少走彎路。

最后,對于Mybatis源碼閱讀的整個流程,最好是本地環境搭起來,然后搞個demo,debug模式一步一步走起。

本文轉載自微信公眾號「 Java后端技術全棧」,可以通過以下二維碼關注。轉載本文請聯系 Java后端技術全棧公眾號。

 

責任編輯:武曉燕 來源: Java后端技術全棧
相關推薦

2024-07-15 09:08:51

源碼debug根節點

2022-05-17 10:41:20

接口JSON數據

2009-11-03 08:56:02

linux死機操作系統

2024-04-22 08:17:23

MySQL誤刪數據

2022-12-19 11:31:57

緩存失效數據庫

2017-02-21 13:11:43

SDN網絡體系SDN架構

2022-05-19 08:01:49

PostgreSQL數據庫

2019-10-12 09:50:46

Redis內存數據庫

2018-01-28 20:39:39

戴爾

2022-07-05 11:48:47

MySQL死鎖表鎖

2015-10-22 09:09:59

BAT投資VC

2020-12-30 08:35:59

Linux運維Linux系統

2017-12-21 20:01:38

潤乾報表

2019-08-29 07:35:29

網站404空白nginx

2011-07-28 13:45:06

2024-10-09 17:06:52

RedisHash哈希表

2020-03-18 19:00:29

電腦內存不足系統

2015-10-10 08:52:13

程序員疲勞

2024-10-18 09:55:50

RedisHash數據

2022-07-05 14:19:30

Spring接口CGLIB
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 9porny九色视频自拍 | 久久大陆 | 日韩午夜激情 | 久久精品色欧美aⅴ一区二区 | 亚洲精品在线免费 | 粉嫩粉嫩芽的虎白女18在线视频 | 中文字幕二区 | 亚洲一页 | av网站免费观看 | 毛片在线免费播放 | 久久成人免费 | 黄色日本视频 | 一区二区三区视频在线 | 成人国产精品久久久 | 羞羞视频在线观看网站 | 日日综合| 成人久久久久 | 国产精品一区二区三区99 | 欧洲免费毛片 | 成人h动漫精品一区二区器材 | 成人在线不卡 | 欧美综合久久 | 日韩久久久久 | 福利视频大全 | 国产探花在线精品一区二区 | 久久久久久久久淑女av国产精品 | 国产亚洲欧美在线 | 精品久久久久久国产 | 中文精品视频 | 亚州精品天堂中文字幕 | 天堂一区二区三区 | 成人精品一区二区三区四区 | 欧美日韩亚洲视频 | 国产精品欧美一区二区三区 | 亚洲欧洲视频 | 国产欧美性成人精品午夜 | 欧美一级片在线看 | 国产成人av在线播放 | 欧美综合视频在线 | 国产一区精品在线 | 久久777 |