您现在的位置是:首页 >技术交流 >高效 MyBatis SQL 写法一网站首页技术交流
高效 MyBatis SQL 写法一
                简介高效 MyBatis SQL 写法一            
            高效 MyBatis SQL 写法一
前言

MyBatis 作为一款优秀的持久层框架,极大地简化了数据库操作。
然而,在实际开发中,XML 配置的编写仍然可能显得繁琐。
本文将分享一些 MyBatis 动态 SQL 的优质写法,帮助开发者提升效率并减少错误。
forEach 标签的使用
 
forEach 标签常用于循环遍历集合,生成动态 SQL。
其核心属性包括:
- item:集合中元素的别名。
 - index:集合中元素的索引。
 - collection:集合对象,必须指定。
 - open:循环开始时的符号,如 
(。 - separator:元素间的分隔符,如 
,。 - close:循环结束时的符号,如 
)。 
示例:
public List<Entity> queryById(List<String> userIds);
 
对应的 XML 配置:
<select id="queryById" resultMap="BaseResultMap">
    SELECT * FROM entity
    WHERE id IN
    <foreach collection="userIds" item="userId" index="index" open="(" separator="," close=")">
        #{userId}
    </foreach>
</select>
 
注意:collection 属性的值取决于传入参数的类型。
如果传入的是 List,则值为 list;如果是数组,则为 array;如果是多个参数,则需封装为 Map。
模糊查询与 concat 函数
 
模糊查询时,可以使用 concat 函数动态拼接 SQL 语句。
示例:
<select id="queryByName" resultMap="BaseResultMap" parameterType="Entity">
    SELECT * FROM entity
    <where>
        <if test="name != null">
            name LIKE concat('%', #{name}, '%')
        </if>
    </where>
</select>
 
choose 标签的多条件判断
 
choose 标签类似于 Java 中的 switch 语句,用于多条件判断。
示例:
<select id="getUserList_choose" resultMap="resultMap_user" parameterType="User">
    SELECT * FROM User u
    <where>
        <choose>
            <when test="username != null">
                u.username LIKE CONCAT('%', #{username}, '%')
            </when>
            <when test="sex != null">
                AND u.sex = #{sex}
            </when>
            <otherwise>
                AND u.status = 'ACTIVE'
            </otherwise>
        </choose>
    </where>
</select>
 
selectKey 标签的主键生成
 
在插入数据时,selectKey 标签可用于生成主键。
示例:
<insert id="createStudentAutoKey" parameterType="StudentEntity" keyProperty="studentId">
    <selectKey keyProperty="studentId" resultType="String" order="BEFORE">
        SELECT nextval('student')
    </selectKey>
    INSERT INTO STUDENT_TBL (student_id, student_name, student_sex, student_birthday)
    VALUES (#{studentId}, #{studentName}, #{studentSex}, #{studentBirthday})
</insert>
 
if 标签的动态条件
 
if 标签用于动态生成 SQL 条件。
示例:
<select id="getStudentList_if" 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>
 
总结
通过合理使用 MyBatis 的动态 SQL 标签,开发者可以显著提升代码的可读性和维护性,同时减少错误的发生。
本文介绍的几种常见用法,涵盖了从条件判断到批量操作的多种场景,希望能为你的开发工作带来帮助。
– 欢迎点赞、关注、转发、收藏【我码玄黄】,各大平台同名。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。
        
    
        
    
            




U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结