高效 MyBatis SQL 写法二

前言

MyBatis 作为一款优秀的持久层框架,极大地简化了数据库操作。

然而,在实际开发中,XML 配置的编写仍然可能显得繁琐。

本文将分享一些 MyBatis 动态 SQL 的优质写法,帮助开发者提升效率并减少错误。

if + where 标签的组合

where 标签可以自动处理 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 标签的更新操作

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 标签可以替代 whereset 标签,提供更灵活的 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 标签,开发者可以显著提升代码的可读性和维护性,同时减少错误的发生。

本文介绍的几种常见用法,涵盖了从条件判断到批量操作的多种场景,希望能为你的开发工作带来帮助。

– 欢迎点赞、关注、转发、收藏【我码玄黄】,各大平台同名。


我码玄黄
1 声望0 粉丝