最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis源碼解讀-Java中executor包的語(yǔ)句處理功能

 更新時(shí)間:2022年02月18日 09:49:05   作者:灰太狼_cxh  
這篇文章主要介紹了Java中executor包的語(yǔ)句處理功能,在mybatis映射文件中傳參數(shù),主要用到#{}或者${},下文圍繞相關(guān)資料展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下

1.mybatis對(duì)多語(yǔ)句類型的支持

在mybatis映射文件中傳參數(shù),主要用到#{} 或者 ${}.

  • #{}:表示使用這種符號(hào)的變量會(huì)以預(yù)編譯的形式賦值到sql片段中。
  • ${}:表示使用這種符號(hào)的變量會(huì)以字符串的形式直接插到sql片段中。

mybatis中支持三種語(yǔ)句類型,不同語(yǔ)句類型支持的變量符號(hào)不同。mybatis的三種類型如下:

  • STATEMENT:這種語(yǔ)句類型中,只會(huì)對(duì)sql片段進(jìn)行簡(jiǎn)單的字符串拼接。只支持使用${}.
  • PREPARED:這種語(yǔ)句中會(huì)先對(duì)sql片段進(jìn)行字符串拼接,然后再對(duì)sql片段進(jìn)行賦值??梢允褂?{}和${}.
  • CALLABLE:這種語(yǔ)句用了實(shí)現(xiàn)執(zhí)行過(guò)程的調(diào)用,會(huì)先對(duì)sql片段進(jìn)行字符串拼接,然后對(duì)sql片段進(jìn)行賦值??梢允褂?{}和${}.

2.mybatis的語(yǔ)句處理功能

statement子包負(fù)責(zé)提供語(yǔ)句處理功能,其中StatementHandler是語(yǔ)句功能類的父接口,RoutingStatementHandler類是一個(gè)代理類,它能夠根據(jù)傳入的MappedStatement對(duì)象的具體類型選中一個(gè)具體的被代理對(duì)象,然后將所有實(shí)際操作都委托給被代理對(duì)象。所以RoutingStatementHandler類提供的是路由功能,而路由選擇的依據(jù)就是語(yǔ)句類型。

public class RoutingStatementHandler implements StatementHandler {

? // 根據(jù)語(yǔ)句類型選取出的被代理類的對(duì)象
? private final StatementHandler delegate;

? public RoutingStatementHandler(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {
? ? // 根據(jù)語(yǔ)句類型選擇被代理對(duì)象
? ? switch (ms.getStatementType()) {
? ? ? case STATEMENT:
? ? ? ? delegate = new SimpleStatementHandler(executor, ms, parameter, rowBounds, resultHandler, boundSql);
? ? ? ? break;
? ? ? case PREPARED:
? ? ? ? delegate = new PreparedStatementHandler(executor, ms, parameter, rowBounds, resultHandler, boundSql);
? ? ? ? break;
? ? ? case CALLABLE:
? ? ? ? delegate = new CallableStatementHandler(executor, ms, parameter, rowBounds, resultHandler, boundSql);
? ? ? ? break;
? ? ? default:
? ? ? ? throw new ExecutorException("Unknown statement type: " + ms.getStatementType());
? ? }
? }
}

BaseStatementHandler作為三個(gè)實(shí)現(xiàn)類的父類,提供了實(shí)現(xiàn)類的公共方法。并且BaseStatementHandler類使用的模板模式在prepare方法中定義了整個(gè)方法的框架,然后將一些與子類相關(guān)的操作交給三個(gè)子類處理。

SimpleStatementHandler類、PreparedStatementHandler類和CallableStatementHandler類是三個(gè)真正的statement處理器,分別處理statement、preparedStatement、CallableStatement對(duì)象。通過(guò)其中的parameterize方法可以看出三個(gè)Statement處理器的不同。

SimpleStatementHandler中parameterize方法的實(shí)現(xiàn)為空,因?yàn)樗恍枰瓿勺址鎿Q即可,不需要進(jìn)行參數(shù)處理

public class SimpleStatementHandler extends BaseStatementHandler {

?@Override
? public void parameterize(Statement statement) {
? ? // N/A
? }

? }

PreparedStatementHandlerparameterize方法最終通過(guò)ParameterHandler接口經(jīng)過(guò)多級(jí)中轉(zhuǎn)后調(diào)用了PreparedStatement類中的參數(shù)賦值方法。

public class PreparedStatementHandler extends BaseStatementHandler {
? @Override
? public void parameterize(Statement statement) throws SQLException {
? ? parameterHandler.setParameters((PreparedStatement) statement);
? }
}

CallableStatementHandlerparameterize主要是通過(guò)registerOutputParameters方法中轉(zhuǎn)后調(diào)用CallableStatement中的輸出參數(shù)注冊(cè)方法完成輸出參數(shù)的注冊(cè),然后通過(guò)ParameterHandler接口經(jīng)過(guò)多級(jí)中轉(zhuǎn)后調(diào)用了PreparedStatement類中的參數(shù)賦值方法。

public class CallableStatementHandler extends BaseStatementHandler {
?/**
? ?* 對(duì)語(yǔ)句進(jìn)行參數(shù)處理
? ?* @param statement SQL語(yǔ)句
? ?* @throws SQLException
? ?*/
? @Override
? public void parameterize(Statement statement) throws SQLException {
? ? // 輸出參數(shù)的注冊(cè)
? ? registerOutputParameters((CallableStatement) statement);
? ? // 輸入?yún)?shù)的處理
? ? parameterHandler.setParameters((CallableStatement) statement);
? }

}

到此這篇關(guān)于mybatis源碼解讀-Java中executor包的語(yǔ)句處理功能的文章就介紹到這了,更多相關(guān)executor包語(yǔ)句處理功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用@Value 注入 List 類型的配置屬性需要注意的 BUG

    使用@Value 注入 List 類型的配置屬性需要注意的 BUG

    這篇文章主要介紹了使用@Value 注入 List 類型的配置屬性需要注意的 BUG,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java中WeakHashMap的工作原理詳解

    Java中WeakHashMap的工作原理詳解

    這篇文章主要介紹了Java中WeakHashMap的工作原理詳解,WeakHashMap
    從名字可以得知主要和Map有關(guān),不過(guò)還有一個(gè)Weak,我們就更能自然而然的想到這里面還牽扯到一種弱引用結(jié)構(gòu),因此想要徹底搞懂,我們還需要知道四種引用,需要的朋友可以參考下
    2023-09-09
  • java實(shí)現(xiàn)給圖片加鋪滿的網(wǎng)格式文字水印

    java實(shí)現(xiàn)給圖片加鋪滿的網(wǎng)格式文字水印

    這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)給圖片加鋪滿的網(wǎng)格式文字水印的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java substring方法實(shí)現(xiàn)原理解析

    Java substring方法實(shí)現(xiàn)原理解析

    這篇文章主要介紹了Java substring方法實(shí)現(xiàn)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Mybatis 動(dòng)態(tài)SQL的幾種實(shí)現(xiàn)方法

    Mybatis 動(dòng)態(tài)SQL的幾種實(shí)現(xiàn)方法

    這篇文章主要介紹了Mybatis 動(dòng)態(tài)SQL的幾種實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 使用Postman傳遞arraylist數(shù)據(jù)給springboot方式

    使用Postman傳遞arraylist數(shù)據(jù)給springboot方式

    這篇文章主要介紹了使用Postman傳遞arraylist數(shù)據(jù)給springboot方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java實(shí)現(xiàn)按比抽獎(jiǎng)功能

    Java實(shí)現(xiàn)按比抽獎(jiǎng)功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)按比抽獎(jiǎng)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • 簡(jiǎn)單了解Java類成員初始化順序

    簡(jiǎn)單了解Java類成員初始化順序

    這篇文章主要介紹了簡(jiǎn)單了解Java類成員初始化順序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • lombok插件無(wú)法使用的原因及解決方案

    lombok插件無(wú)法使用的原因及解決方案

    這篇文章主要介紹了lombok插件無(wú)法使用的原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • JAVA 注解詳解及簡(jiǎn)單實(shí)例

    JAVA 注解詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了JAVA 注解詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05

最新評(píng)論

阆中市| 蓬莱市| 东安县| 灵武市| 英德市| 稷山县| 龙岩市| 扶余县| 顺昌县| 普陀区| 拜泉县| 张家港市| 天长市| 远安县| 犍为县| 新建县| 乌兰察布市| 申扎县| 连云港市| 兴隆县| 新疆| 元朗区| 西乡县| 信阳市| 科尔| 那曲县| 延寿县| 巴彦淖尔市| 华安县| 吉木萨尔县| 宜昌市| 左云县| 中方县| 邮箱| 惠州市| 华安县| 伽师县| 定南县| 安阳市| 报价| 博乐市|