日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mybatis的第三章动态sql总结

發布時間:2025/3/21 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis的第三章动态sql总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們來講一下為什么要使用Mybatis的動態sql ?

*因為動態sql之所以是Mybatis 的強大特性是因為我們在使用JDBC操作數據庫的時候如果查詢特別的多,將條件串聯成sql字符串是一件很痛苦的事,而且也并不能省略逗號,而Mybatis的動態sql就為我們解決了這些麻煩,這個動態sql是基于OGNL的表達式,也可以方便我們在sql語句中實現某些邏輯。
*用于實現動態sql的核心標簽如下幾種:
1. if(屬性:“test”用來判斷條件)
利用if我們可以實現簡單的條件選擇可以和where標簽配合使用
具體mapper.xml配置文件中的代碼實現如下:


當然也可以配合if+trim使用:

我用的是List集合的dao接口查詢

然后簡單的在main方法里進行實現:

  • set(沒有屬性 ,一般用在更新語句update上,解決動態更新語句,也可以和trim+if搭配使用)
    直接上mapper.xml配置文件代碼幫助理解:

  • 在dao接口這里要注意你使用的update更新語句,所以接口的返回類型一定得是int類型的返回值用來判斷數據庫中受影響的行數,參考如下:

    用main方法的簡單實現:

  • foreach
    基本屬性:
  • 在mapper.xml配置文件中
    item(表示集合的每個元素進行迭代時的別名)自我理解也就是說dao接口方法里的參數,
    index(指定一個名稱,用于表示在迭代過程中,每次迭代到的位置),
    open(表示該語句以什么時候開始)既然是in條件語句,所以必然是"("開始,
    separator(表示在每次進行迭代之間以什么符號作為分隔符)既然是in條件語句必然是是以","逗號作為分隔符
    close(表示該語句以什么結束)所以必然是以“)”結束。
    collection(他是最容易出錯的屬性,需格外注意該屬性必須指定,不同情況下該屬性的值是不一樣的,總有三種情況)
    1)如入參為單參數且參數類型是一個List集合的時候,collection的屬性值為list。
    2)如若入參為單參數且參數類型是一個數組的時候,collection的屬性值為array(此處傳入參數Integer[] rolelds 為數組類型,故此處collection的屬性設置為“array”)
    3)如若入參為多參數,就需要把他們封裝為一個Map進行處理
    select中返回的是一個resultMap(id=“userMapRole”),該resultMap也進行了相應的字段映射。
    如下圖提供了單參數為list,array多參數為Map的示例

    也使用了但參數Map和多參數Map的示例如下圖


    下面是dao接口提供的一些示例

  • choose
    基本屬性:
  • when(when也是用test屬性來進行條件判斷的)
    otherwise(這個屬性自我理解成else的意思)
    通常搭配 when,otherwise使用,也就是說choose相當于之前我們學習的if-esle..if-else..
    (ps:這個choose標簽通常可以和switch進行聯想學習,但是switch一般都是等值判斷,我們的choose標簽就比較厲害了他可以在when屬性里進行判斷)
    示例如下:

  • if+trim
    基本屬性(在上面我們都介紹過,他可以搭配多種標簽進行使用 )
  • prefix:前綴(作用是通過自動識別是否有返回值后,在trim包含的內容上加上前綴)
    sufix:后綴(作用是在trim包含內容上加上后綴)
    prefixOverrides:對于trim標簽的內容的 首部進行指定內容(如and|or)的忽略或者剔除
    sufifxOverrides:對于trim包含的內容的尾部進行指定的內容的忽略
    以上標簽屬性運行出來以后會自動為sql語句進行拼接這是trim標簽的強大之處
    如下圖的示例觀察:

    我們可以觀察一下我們運行出來的結果便一目了然:

    9.最后我上一個 mybatis插件來實現分頁的功能·
    用mybatis框架實現分頁功能

    打開Mybatis官網http://www.mybatis.org/mybatis-3/zh/configuration.html#plugins

    1)找到plugins的插件的官方說明檔

    2)在項目的configuration.xml的核心文件中配置plugins屬性配置(如果不知道核心文件的配置順序點擊一下操作查看源碼)

    <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> 點擊這行找到< !ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>

    3)plugins屬性配置

    <plugins><plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"><property name="dialectType" value="mysql"/></plugin> </plugins>

    4)不知道plugins的屬性interceptor的包怎么寫 雙擊兩下Shift輸入Interceptor的ibatis包下的類點開

    然后在main方法里創建IPage對象 然后獲取getTotal()方法

    6)

    打開Configuration類里的newExecutor方法 然后點進去interceptorChain的類

    點開pluginAll的方法你會發現 用在list集合放的是Interceptor攔截器 然后用froeach循環遍歷了這個list集合調用了咱們的plugin插件。

    因此

    Executor就是插件攔截之一

  • 事務**未完待續.....
  • 總結

    以上是生活随笔為你收集整理的Mybatis的第三章动态sql总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。