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 标签,开发者可以显著提升代码的可读性和维护性,同时减少错误的发生。
本文介绍的几种常见用法,涵盖了从条件判断到批量操作的多种场景,希望能为你的开发工作带来帮助。
– 欢迎点赞、关注、转发、收藏【我码玄黄】,各大平台同名。