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方法裏進行實現:
在這裏插入圖片描述

  1. set(沒有屬性 ,一般用在更新語句update上,解決動態更新語句,也可以和trim+if搭配使用)
    直接上mapper.xml配置文件代碼幫助理解:
    在這裏插入圖片描述
    在dao接口這裏要注意你使用的update更新語句,所以接口的返回類型一定得是int類型的返回值用來判斷數據庫中受影響的行數,參考如下:
    在這裏插入圖片描述
    用main方法的簡單實現:
    在這裏插入圖片描述

  2. 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接口提供的一些示例
    在這裏插入圖片描述

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

  4. if+trim
    基本屬性(在上面我們都介紹過,他可以搭配多種標籤進行使用 )
    prefix:前綴(作用是通過自動識別是否有返回值後,在trim包含的內容上加上前綴)
    sufix:後綴(作用是在trim包含內容上加上後綴)
    prefixOverrides:對於trim標籤的內容的 首部進行指定內容(如and|or)的忽略或者剔除
    sufifxOverrides:對於trim包含的內容的尾部進行指定的內容的忽略
    以上標籤屬性運行出來以後會自動爲sql語句進行拼接這是trim標籤的強大之處
    如下圖的示例觀察:
    在這裏插入圖片描述
    我們可以觀察一下我們運行出來的結果便一目瞭然:

在這裏插入圖片描述
你會發現它會自動幫我們加上where條件判斷和自動剔除最後一個逗號
9.最後我上一個 mybatis插件來實現分頁的功能·
用mybatis框架實現分頁功能

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

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

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

<!DOCTYPE configuration
        PUBLIC "-//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就是插件攔截之一

  1. 事務**未完待續…
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章