高效 MyBatis SQL 写法二
前言
MyBatis
作为一款优秀的持久层框架,极大地简化了数据库操作。
然而,在实际开发中,XML
配置的编写仍然可能显得繁琐。
本文将分享一些 MyBatis
动态 SQL
的优质写法,帮助开发者提升效率并减少错误。
if
+ where
标签的组合
where
标签可以自动处理 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
标签的更新操作
set
标签用于动态生成 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
标签的灵活使用
trim
标签可以替代 where
和 set
标签,提供更灵活的 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
标签的批量操作
foreach
标签常用于 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 片段的复用
通过 <sql>
标签定义可复用的 SQL
片段,提升代码的可读性和维护性。
示例:
<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>
总结
通过合理使用 MyBatis
的动态 SQL
标签,开发者可以显著提升代码的可读性和维护性,同时减少错误的发生。
本文介绍的几种常见用法,涵盖了从条件判断到批量操作的多种场景,希望能为你的开发工作带来帮助。
– 欢迎点赞、关注、转发、收藏【我码玄黄】,各大平台同名。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。