高效 MyBatis SQL 寫法二
前言

MyBatis 作為一款優(yōu)秀的持久層框架,極大地簡化了數(shù)據(jù)庫操作。
然而,在實際開發(fā)中,XML 配置的編寫仍然可能顯得繁瑣。
本文將分享一些 MyBatis 動態(tài) SQL 的優(yōu)質(zhì)寫法,幫助開發(fā)者提升效率并減少錯誤。
if + where 標(biāo)簽的組合
where 標(biāo)簽可以自動處理 AND 或 OR 的多余問題。
示例:
<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)簽可以替代 where 和 set 標(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ā)、收藏【我碼玄黃】,各大平臺同名。