高效 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
标签,开发者可以显著提升代码的可读性和维护性,同时减少错误的发生。
本文介绍的几种常见用法,涵盖了从条件判断到批量操作的多种场景,希望能为你的开发工作带来帮助。
– 欢迎点赞、关注、转发、收藏【我码玄黄】,各大平台同名。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦