高效 MyBatis SQL 寫法二

高效 MyBatis SQL 寫法二

前言

MyBatis 作為一款優(yōu)秀的持久層框架,極大地簡化了數(shù)據(jù)庫操作。

然而,在實際開發(fā)中,XML 配置的編寫仍然可能顯得繁瑣。

本文將分享一些 MyBatis 動態(tài) SQL 的優(yōu)質(zhì)寫法,幫助開發(fā)者提升效率并減少錯誤。

if + where 標(biāo)簽的組合

where 標(biāo)簽可以自動處理 ANDOR 的多余問題。

示例:

<select id="getStudentList_whereIf" resultMap="resultMap_studentEntity" parameterType="StudentEntity">
    SELECT * FROM STUDENT_TBL ST
    <where>
        <if test="studentName != null">
            ST.STUDENT_NAME LIKE CONCAT('%', #{studentName}, '%')
        </if>
        <if test="studentSex != null">
            AND ST.STUDENT_SEX = #{studentSex}
        </if>
    </where>
</select>

if + set 標(biāo)簽的更新操作

set 標(biāo)簽用于動態(tài)生成 UPDATE 語句中的 SET 部分。

示例:

<update id="updateStudent_if_set" parameterType="StudentEntity">
    UPDATE STUDENT_TBL
    <set>
        <if test="studentName != null">
            STUDENT_NAME = #{studentName},
        </if>
        <if test="studentSex != null">
            STUDENT_SEX = #{studentSex},
        </if>
    </set>
    WHERE STUDENT_ID = #{studentId}
</update>

trim 標(biāo)簽的靈活使用

trim 標(biāo)簽可以替代 whereset 標(biāo)簽,提供更靈活的 SQL 生成。

示例:

<select id="getStudentList_if_trim" resultMap="resultMap_studentEntity">
    SELECT * FROM STUDENT_TBL ST
    <trim prefix="WHERE" prefixOverrides="AND |OR ">
        <if test="studentName != null">
            ST.STUDENT_NAME LIKE CONCAT('%', #{studentName}, '%')
        </if>
        <if test="studentSex != null">
            AND ST.STUDENT_SEX = #{studentSex}
        </if>
    </trim>
</select>

foreach 標(biāo)簽的批量操作

foreach 標(biāo)簽常用于 IN 條件中的批量操作。

示例:

<select id="getStudentListByClassIds_foreach_array" resultMap="resultMap_studentEntity">
    SELECT * FROM STUDENT_TBL ST
    WHERE ST.CLASS_ID IN
    <foreach collection="array" item="classId" open="(" separator="," close=")">
        #{classId}
    </foreach>
</select>

SQL 片段的復(fù)用

通過 <sql> 標(biāo)簽定義可復(fù)用的 SQL 片段,提升代碼的可讀性和維護(hù)性。

示例:

<sql id="studentColumns">
    STUDENT_ID, STUDENT_NAME, STUDENT_SEX, STUDENT_BIRTHDAY
</sql>

<select id="getStudentList" resultMap="resultMap_studentEntity">
    SELECT
    <include refid="studentColumns"/>
    FROM STUDENT_TBL
</select>

總結(jié)

通過合理使用 MyBatis 的動態(tài) SQL 標(biāo)簽,開發(fā)者可以顯著提升代碼的可讀性和維護(hù)性,同時減少錯誤的發(fā)生。

本文介紹的幾種常見用法,涵蓋了從條件判斷到批量操作的多種場景,希望能為你的開發(fā)工作帶來幫助。

– 歡迎點贊、關(guān)注、轉(zhuǎn)發(fā)、收藏【我碼玄黃】,各大平臺同名。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容