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

MyBatis實現動態(tài)SQL的方法

 更新時間:2024年06月20日 10:31:45   作者:花落隨風輕飄舞  
動態(tài)SQL是MyBatis強大特性之一,極大的簡化我們拼裝SQL的操作,本文主要介紹了MyBatis實現動態(tài)SQL的方法,具有一定的參考價值,感興趣的可以了解一下

1 動態(tài) SQL 介紹

動態(tài) SQL 是 MyBatis 強大特性之一,極大的簡化我們拼裝 SQL 的操作。MyBatis 的動態(tài) SQL 是基于 OGNL 的( Object Graph Navigation Language ,對象圖導航語言),它是一種強大的表達式語言,通過它可以非常方便的來操作對象屬性, 類似于 EL,SpEL 等的表達式。動態(tài) SQL 主要有以下幾類:

  • if 標簽用于條件判斷,根據條件是否滿足來決定是否包含某個元素。
  • where 標簽用于生成 WHERE 子句,并會自動去掉(忽略)第一個條件的 and 或 or 關鍵字,避免語法錯誤
  • set 標簽:用于生成 SET 子句,進行更新操作,可以自動處理最后一個條件結尾的逗號
  • trim 標簽用于去除或添加前綴和后綴
  • choose、when、otherwise 標簽類似于 Java 中的 switch、case、default 語句,根據不同的條件選擇執(zhí)行不同的 SQL 片段
  • foreach 標簽用于遍歷集合,常用于 IN 語句中的參數列表生成
  • bind 標簽用于在 OGNL 表達式之外創(chuàng)建一個變量,并將其綁定到當前的上下文中,以便在后續(xù)的表達式中使用

2 if 標簽

if 標簽,根據條件是否滿足來決定是否包含某個元素,判斷條件寫在 if 標簽的 test 屬性中

<resultMap id="employeeMap" type="com.dao.Employee">
    <id property="empId" column="employee_id"/>
    <result property="empName" column="employee_name"/>
    <result property="empAge" column="employee_age"/>
    <result property="empSex" column="employee_sex"/>
    <result property="empEmail" column="employee_email"/>
    <result property="empAddress" column="employee_address"/>
</resultMap>

<select id="getEmpIf" parameterType="com.dao.Employee" resultMap="employeeMap">
    select * from employee where
    <if test="empName != null and empName != ''">
        employee_name=#{empName}
    </if>
</select>

上述代碼如果 if 標簽的條件不符合,則查詢語句為 select * from employee where,會報錯

3 where 標簽

where 標簽,用于生成 WHERE 子句,并會自動去掉(忽略)第一個條件的 and 或 or 關鍵字,避免語法錯誤。

<select id="getEmpWhereIf" parameterType="com.dao.Employee" resultMap="employeeMap">
    select * from employee
    <where>
        <if test="empName != null and empName !=''">
            and employee_name=#{empName}
        </if>
    </where>
</select>

通過 where 標簽查詢,不會出現 SQL 語句多余 where 的情況

4 set 標簽

set 標簽,用于生成 SET 子句,進行更新操作,可以自動處理最后一個條件結尾的逗號

<update id="UpdateEmployee" parameterType="com.dao.Employee">
    update employee
    <set>
        <if test="empName != null and empName !=''">
            employee_name=#{empName},
        </if>
    </set>
    where employee_id=#{empId}
</update>

測試代碼需要提交事務,sqlSession.commit(); 否則不會更新數據庫

5 trim 標簽

trim 標簽,用于去除或添加前綴和后綴,以下是 trim 標簽的屬性:

  • prefix:表示在 trim 標簽內的 sql 語句加上前綴
  • suffix:表示在 trim 標簽內的 sql 語句加上后綴
  • prefixOverrides:表示去除第一個前綴
  • suffixOverrides:表示去除最后一個后綴
<select id="getEmpWhereIf" parameterType="com.dao.Employee" resultMap="employeeMap">
    select * from employee
    <!-- 添加前綴 where,移除 and 或 or -->
    <trim prefix="where" prefixOverrides="and | or">
        <if test="empName != null">
            and employee_name=#{empName}
        </if>
    </trim>
</select>

6 choose、when、otherwise 標簽

choose、when、otherwise 標簽,類似于 Java 中的 switch 語句,根據不同的條件選擇執(zhí)行不同的 SQL 片段

<select id="selectEmployeeByChoose" resultType="com.dao.Employee" parameterMap="employeeMap">
    select * from employee
    <where>
        <choose>
            <when test="empName!= null and empName!=''">
                employee_name=#{empName}
            </when>
            <when test="empAddress!= null and empAddress!=''">
                and employee_address=#{empAddress}
            </when>
            <otherwise>
                and employee_age=#{empAge}
            </otherwise>
        </choose>
    </where>
</select>

7 foreach 標簽

foreach 標簽,用于遍歷集合,常用于 IN 語句中的參數列表生成。foreach 標簽有以下幾個屬性:

  • collection:表示要遍歷的集合元素,注意不要寫 #{}。
  • item:表示每次遍歷時生成的對象名(當傳入 Map 對象或 Map.Entry 對象的集合時,index  是鍵,item 是值)
  • index:表示在迭代過程中,每次迭代到的位置
  • open:表示開始遍歷時要拼接的字符串
  • close:表示結束遍歷時要拼接的字符串
  • sperator:表示在每次遍歷時,兩個對象之間的連接字符串
在 Mapper.xml SQL 映射文件
<select id="selectEmployeeByListId" resultMap="employeeMap">
    select * from employee
    <where>
        <!-- where employee_id in (?,?,?,?)-->
<!--        <foreach collection="ids" item="id" open="employee_id in (" close=")" separator=",">-->
<!--            #{id}-->
<!--        </foreach>-->
        <!-- where employee_id=? or employee_id=?... -->
        <foreach collection="ids" item="id" separator="or">
            employee_id=#{id}
        </foreach>
    </where>
</select>

在 Mapper.java 接口
List<Employee> selectEmployeeByListId(@Param("ids") List<Integer> ids);

在 Test 測試類
@Test
public void testSelectByListid() {
    List<Integer> ids = new ArrayList<>();
    ids.add(1);
    ids.add(2);
    ids.add(4);
    ids.add(5);
    List<Employee> employees = mapper.selectEmployeeByListId(ids);
    for (Employee employee : employees) {
        System.out.println(employee);
    }
}

8 bind 標簽

bind 標簽,用于在 OGNL 表達式之外創(chuàng)建一個變量,并將其綁定到當前的上下文中,以便在后續(xù)的表達式中使用。

<!-- 查詢姓馬的員工 -->
<select id="selectEmployeeByName" parameterType="com.dao.Employee" resultMap="employeeMap">
    <bind name="pattern" value="'%' + empName + '%'"/>
    select * from employee where employee_name like #{pattern}
</select>

到此這篇關于MyBatis實現動態(tài)SQL的方法的文章就介紹到這了,更多相關MyBatis 動態(tài)SQL內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java設計模式之java模板方法模式詳解

    Java設計模式之java模板方法模式詳解

    這篇文章主要介紹了Java設計模式模板方法模式(Template)用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-09-09
  • Java中Spring Boot支付寶掃碼支付及支付回調的實現代碼

    Java中Spring Boot支付寶掃碼支付及支付回調的實現代碼

    這篇文章主要介紹了Java中Spring Boot支付寶掃碼支付及支付回調的實現代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • spring boot 3.3.0和mybatis plus 3.5.6版本沖突的問題解決

    spring boot 3.3.0和mybatis plus 3.5.6版本沖突

    這篇文章主要介紹了spring boot 3.3.0和mybatis plus 3.5.6版本沖突的問題解決,文中介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-07-07
  • Java?Map的compute方法舉例詳解

    Java?Map的compute方法舉例詳解

    Java中的Map是一種用于存儲鍵值對的數據結構,它提供了一系列的方法來操作和訪問其中的元素,下面這篇文章主要給大家介紹了關于Java?Map的compute方法舉例詳解的相關資料,需要的朋友可以參考下
    2024-06-06
  • 超詳細講解Java異常

    超詳細講解Java異常

    Java 異常機制可以使程序中異常處理代碼和正常業(yè)務代碼分離,保證程序代碼更加優(yōu)雅,并提高程序健壯性。本文超詳細講解了Java異常,感興趣的小伙伴可以參考一下這篇文章
    2021-09-09
  • java獲取文件編碼,jsoup獲取html純文本操作

    java獲取文件編碼,jsoup獲取html純文本操作

    這篇文章主要介紹了java獲取文件編碼,jsoup獲取html純文本操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • JVM中的守護線程示例詳解

    JVM中的守護線程示例詳解

    這篇文章主要給大家介紹了關于JVM中守護線程的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • Java連接MongoDB進行增刪改查的操作

    Java連接MongoDB進行增刪改查的操作

    這篇文章主要介紹了Java連接MongoDB進行增刪改查的操作的相關資料,需要的朋友可以參考下
    2017-05-05
  • Java超詳細大文件分片上傳代碼

    Java超詳細大文件分片上傳代碼

    文件上傳是一個很常見的功能。在項目開發(fā)過程中,我們通常都會使用一些成熟的上傳組件來實現對應的功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>
    2022-06-06
  • 使用Javacsv.jar的jar包操作csv文件的方法

    使用Javacsv.jar的jar包操作csv文件的方法

    使用javacsv的jar包很方便的可以操作csv文件。下面通過本教程給大家介紹使用javacsv.jar操作csv文件的方法,感興趣的朋友一起看下吧
    2016-08-08

最新評論

宜兰市| 景泰县| 娱乐| 巫山县| 高碑店市| 涿州市| 达孜县| 木里| 呈贡县| 石门县| 子长县| 惠来县| 威宁| 香格里拉县| 盐山县| 紫阳县| 元谋县| 大英县| 五河县| 商丘市| 浙江省| 修文县| 资溪县| 温宿县| 阜宁县| 台江县| 金堂县| 石泉县| 绥化市| 茂名市| 宕昌县| 武川县| 连云港市| 台南县| 奉化市| 聂拉木县| 乐陵市| 荣成市| 霞浦县| 房产| 宜章县|