mybatis传递多个参数_深入浅出MyBatis:MyBatis解析和运行原理
原文:https://juejin.im/post/5abcbd946fb9a028d1412efc
本篇文章是「深入淺出MyBatis:技術(shù)原理與實踐」書籍的總結(jié)筆記。
上一篇介紹了反射和動態(tài)代理基礎(chǔ),主要是為本篇文章做個鋪墊,反射使配置和靈活性大大提高,可以給很多配置設(shè)置參數(shù),動態(tài)代理可以在運行時創(chuàng)建代理對象,做一些特殊的處理。
文章索引:
本篇會介紹MyBatis解析和運行原理,下一篇介紹插件及應(yīng)用,目的是更好地編寫插件,通過本篇的介紹,你會了解到:
- 構(gòu)建SqlSessionFactory過程
- 映射器的動態(tài)代理
- SqlSession的4大對象
- sql執(zhí)行的過程
SqlSessionFactory和SqlSession是MyBatis的核心組件,在文章 JDBC和MyBatis介紹 中有詳細說明。
構(gòu)建SqlSessionFactory過程
構(gòu)建主要分為2步:
- 通過XMLConfigBuilder解析配置的XML文件,讀出配置參數(shù),包括基礎(chǔ)配置XML文件和映射器XML文件;
- 使用Configuration對象創(chuàng)建SqlSessionFactory,SqlSessionFactory是一個接口,提供了一個默認的實現(xiàn)類DefaultSqlSessionFactory。
說白了,就是將我們的所有配置解析為Configuration對象,在整個生命周期內(nèi),可以通過該對象獲取需要的配置。
由于插件需要頻繁訪問映射器的內(nèi)部組成,會重點這部分,了解這塊配置抽象出來的對象:
MappedStatement
它保存映射器的一個節(jié)點(select|insert|delete|update),包括配置的SQL,SQL的id、緩存信息、resultMap、parameterType、resultType等重要配置內(nèi)容。
它涉及的對象比較多,一般不去修改它。
SqlSource
它是MappedStatement的一個屬性,主要作用是根據(jù)參數(shù)和其他規(guī)則組裝SQL,也是很復(fù)雜的,一般也不用修改它。
BoundSql
對于參數(shù)和SQL,主要反映在BoundSql類對象上,在插件中,通過它獲取到當前運行的SQL和參數(shù)以及參數(shù)規(guī)則,作出適當?shù)男薷?#xff0c;滿足特殊的要求。
BoundSql提供3個主要的屬性:parameterObject、parameterMappings和sql,下面分別來介紹。
parameterObject為參數(shù)本身,可以傳遞簡單對象、POJO、Map或@Param注解的參數(shù):
- 傳遞簡單對象(int、float、String等),會把參數(shù)轉(zhuǎn)換為對應(yīng)的類,比如int會轉(zhuǎn)換為Integer;
- 如果傳遞的是POJO或Map,paramterObject就是傳入的POJO或Map不變;
- 如果傳遞多個參數(shù),沒有@Param注解,parameterObject就是一個Map對象,類似這樣的形式{"1":p1 , "2":p2 , "3":p3 ... "param1":p1 , "param2":p2 , "param3
總結(jié)
以上是生活随笔為你收集整理的mybatis传递多个参数_深入浅出MyBatis:MyBatis解析和运行原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 13岁男孩网课期间充值《王者荣耀》等游戏
- 下一篇: arduino 水位传感器_云南可信赖的