欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2024年06月20日 10:31:45   作者:花落隨風輕飄舞  
動態(tài)SQL是MyBatis強大特性之一,極大的簡化我們拼裝SQL的操作,本文主要介紹了MyBatis實現(xiàn)動態(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 標簽用于條件判斷,根據(jù)條件是否滿足來決定是否包含某個元素。
  • where 標簽用于生成 WHERE 子句,并會自動去掉(忽略)第一個條件的 and 或 or 關鍵字,避免語法錯誤
  • set 標簽:用于生成 SET 子句,進行更新操作,可以自動處理最后一個條件結尾的逗號
  • trim 標簽用于去除或添加前綴和后綴
  • choose、when、otherwise 標簽類似于 Java 中的 switch、case、default 語句,根據(jù)不同的條件選擇執(zhí)行不同的 SQL 片段
  • foreach 標簽用于遍歷集合,常用于 IN 語句中的參數(shù)列表生成
  • bind 標簽用于在 OGNL 表達式之外創(chuàng)建一個變量,并將其綁定到當前的上下文中,以便在后續(xù)的表達式中使用

2 if 標簽

if 標簽,根據(jù)條件是否滿足來決定是否包含某個元素,判斷條件寫在 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 標簽查詢,不會出現(xiàn) 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(); 否則不會更新數(shù)據(jù)庫

5 trim 標簽

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

  • prefix:表示在 trim 標簽內(nèi)的 sql 語句加上前綴
  • suffix:表示在 trim 標簽內(nèi)的 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 語句,根據(jù)不同的條件選擇執(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 語句中的參數(shù)列表生成。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實現(xiàn)動態(tài)SQL的方法的文章就介紹到這了,更多相關MyBatis 動態(tài)SQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MyBatis-Plus框架整合詳細方法

    MyBatis-Plus框架整合詳細方法

    MyBatis-Plus是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發(fā)、提高效率而生這篇文章主要介紹了MyBatis-Plus框架整合,需要的朋友可以參考下
    2022-04-04
  • MySQL主鍵約束和外鍵約束的實現(xiàn)

    MySQL主鍵約束和外鍵約束的實現(xiàn)

    在MySQL中,主鍵和外鍵約束是通過約束來實現(xiàn)的,本文主要介紹了MySQL主鍵約束和外鍵約束的實現(xiàn), 具有一定的參考價值,感興趣的可以了解下
    2023-11-11
  • 關于druid連接池的使用詳解

    關于druid連接池的使用詳解

    文章介紹了Druid連接池的兩種使用方式:直接在代碼中配置和通過配置文件配置,同時,文章詳細講解了如何在Web項目中啟用Druid的監(jiān)控功能,包括配置web.xml文件、設置過濾器等步驟,最后,文章還提到了Druid提供的加密解密工具,使數(shù)據(jù)庫密碼更安全
    2025-02-02
  • 詳解Mybatis中的 ${} 和 #{}區(qū)別與用法

    詳解Mybatis中的 ${} 和 #{}區(qū)別與用法

    這篇文章主要介紹了Mybatis中的 ${} 和 #{}區(qū)別與用法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Arthas-java程序運行時debug工具使用

    Arthas-java程序運行時debug工具使用

    這篇文章主要介紹了Arthas-java程序運行時debug工具使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • JAVA心得分享---return語句的用法

    JAVA心得分享---return語句的用法

    return算是各大語言的??停旧隙加衦eturn語句,那么在JAVA中,return有什么特殊的地方嗎,下面我們來分析下
    2014-05-05
  • JPA之多對多查詢死循環(huán)嵌套問題及解決方案

    JPA之多對多查詢死循環(huán)嵌套問題及解決方案

    這篇文章主要介紹了JPA之多對多查詢死循環(huán)嵌套問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Dwr3.0純注解(純Java Code配置)配置與應用淺析一之零配置文件化

    Dwr3.0純注解(純Java Code配置)配置與應用淺析一之零配置文件化

    Dwr對我來說最重要的功能點就是反向Ajax調(diào)用,通俗來將就是后端可以直接調(diào)用前端的JS方法(只要在所能訪問的范圍內(nèi)),這也就是Dwr的真正來由,當然它也有最基本的前端直接調(diào)用后端的特性,省去了我們經(jīng)常的一般Ajax調(diào)用
    2016-04-04
  • @Conditional注解的使用場景和源碼解析

    @Conditional注解的使用場景和源碼解析

    這篇文章主要介紹了@Conditional注解的使用場景和源碼解析,@Conditional是一個條件注解,它的作用是判斷Bean是否滿足條件,如果滿足條件,則將Bean注冊進IOC中,如果不滿足條件,則不進行注冊,需要的朋友可以參考下
    2023-11-11
  • 詳解java基于MyBatis使用示例

    詳解java基于MyBatis使用示例

    這篇文章主要介紹了詳解java基于MyBatis使用示例,對學習MyBatis有一定的幫助,有需要的可以了解一下。
    2016-11-11

最新評論