高效 MyBatis SQL 写法一
前言
MyBatis
作为一款优秀的持久层框架,极大地简化了数据库操作。
然而,在实际开发中,XML
配置的编写仍然可能显得繁琐。
本文将分享一些 MyBatis
动态 SQL
的优质写法,帮助开发者提升效率并减少错误。
forEach
标签的使用
forEach
标签常用于循环遍历集合,生成动态 SQL
。
其核心属性包括:
- item:集合中元素的别名。
- index:集合中元素的索引。
- collection:集合对象,必须指定。
- open :循环开始时的符号,如
(
。 - separator :元素间的分隔符,如
,
。 - close :循环结束时的符号,如
)
。
示例:
java
public List<Entity> queryById(List<String> userIds);
对应的 XML
配置:
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
语句。
示例:
xml
<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
语句,用于多条件判断。
示例:
xml
<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
标签可用于生成主键。
示例:
xml
<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
条件。
示例:
xml
<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
标签,开发者可以显著提升代码的可读性和维护性,同时减少错误的发生。
本文介绍的几种常见用法,涵盖了从条件判断到批量操作的多种场景,希望能为你的开发工作带来帮助。
-- 欢迎点赞、关注、转发、收藏【我码玄黄】,各大平台同名。