91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mybatis的運行原理和查詢實現

發布時間:2021-06-22 15:15:26 來源:億速云 閱讀:126 作者:chen 欄目:大數據

這篇文章主要講解了“mybatis的運行原理和查詢實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“mybatis的運行原理和查詢實現”吧!


mybatis接口是編程是利用jdk動態來實現的
1.代理對象不管執行哪個方法都會執行mapperProxy的invoke方法,判斷當前執行器的方法是否是Object類的方法,因為代理對象的方法一部分是從需要代理的接口中實現過來的,另一部分是Object里面的方法比如equals、toString等方法。

mybatis的運行原理和查詢實現
2.接著將Method包裝成MapperMethod對象,該對象包含sqlCommand和MegthodSignature兩個對象,sqlCommand(在初始該對象傳入Configuration,接口的Class對象,Method進行初始化,調用自身的resolveMappedStatement方法獲取拼接statementId,即接口的全路徑名+方法名,調用Configuration.getMappedStatement方法獲取MappedStatement對象,該對象維護了一條<select|update|delete|insert>節點的封裝,這邊很容看出sqlCommand初始化傳入這三個參數的作用了,MegthodSignature存儲了當前要調用方法的詳細信息。

3.MapperMethod調用execute方法傳入sqlsession和方法參數,先通過sqlCommand判斷當前語句的類型。這里我們先講查詢返回對象的情況,mybatis會通過MegthodSignature對象判斷當前要執行的方法返回的條數和類型,去執行相對應的方法。首先調用convertArgsToSqlCommandParam對當前執行的方法參數的解析,接著調用defaultSqlSession.selectOne(command.getName(), param)的方法。這里的command.getName()的值是statementId也就是我們開發配置的namespace加對應語句的id
mybatis的運行原理和查詢實現
這里來分析selectList方法,截圖如下:
首先通過statement,(其實就是我們剛剛上面所說的statementId)從configuration獲取MappedStatement對象。MappedStatement包裝當前運行方法對應的sql語句以及其類型。接著調用executor.query(ms, wrapCollection(parameter), rowBounds, Executor.NO_RESULT_HANDLER)
進一層包裝執行方法的參數,邏輯分頁對象以及MappedStatement對象。傳入該方法中,調用CachingExecutor這個執行器里面query方法,判斷當前是否有配置緩存。沒有緩存默認調用SimpleExecutor里面的query方法。繼續查看simpleExecutor.query方法,該方法會先從本地緩存中也就是一級緩存中查詢當前的要查詢的接口。mybatis通生成緩存key來唯一判斷當前的查詢是否和之前的查詢一致,一致則從緩存中取。(分析到這里我們可以發現mybatis會先查二級緩存,再查一級緩存)。
mybatis的運行原理和查詢實現
進入doQuery方法,聲明原生jdbc的Statement 對象。獲取全局配置信息Configuration,new一個StatementHandler對,也就是mybatis的四大對象之一。
mybatis的運行原理和查詢實現
prepareStatement方法主要獲取connection,也就是數據庫連接對象。最終調用底層的數據查詢,并將查詢接口交給ResultSetHandler進行封裝。


感謝各位的閱讀,以上就是“mybatis的運行原理和查詢實現”的內容了,經過本文的學習后,相信大家對mybatis的運行原理和查詢實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

卓尼县| 板桥市| 屏山县| 梅州市| 泾阳县| 丁青县| 宣化县| 罗田县| 炎陵县| 玉溪市| 神木县| 罗甸县| 昭平县| 股票| 宁波市| 安义县| 溧水县| 漯河市| 庐江县| 中西区| 武宣县| 清水河县| 乌兰浩特市| 朔州市| 吴旗县| 会东县| 石阡县| 五大连池市| 哈尔滨市| 福贡县| 和平区| 砀山县| 浏阳市| 长治市| 万荣县| 东莞市| 革吉县| 沙坪坝区| 康定县| 介休市| 石泉县|