目录
动态sql
简介
MyBatis提供了强大的动态SQL语句功能,可以根据条件动态生成SQL语句,方便灵活地拼接和使用不同的查询条件。以下是MyBatis中常用的动态SQL语句的几种方式:
where if元素
<select id="getUserList" resultType="User">
SELECT * FROM users
WHERE 1=1
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</select>
上述示例中,如果传入参数中有name,则会拼接AND name = #{name}这部分SQL语句;如果有age,则拼接AND age = #{age}这部分SQL语句。
choose、when、otherwise元素:
choose元素类似于Java中的switch语句,可以根据条件选择不同的分支。示例:
<select id="getUserList" resultType="User">
SELECT * FROM users
WHERE 1=1
<choose>
<when test="name != null">
AND name = #{name}
</when>
<when test="age != null">
AND age = #{age}
</when>
<otherwise>
AND status = 'active'
</otherwise>
</choose>
</select>
上述示例中,choose元素会根据条件选择不同的分支,当name不为null时,拼接AND name = #{name};当age不为null时,拼接AND age = #{age};否则,拼接AND status = 'active'。
foreach元素
foreach元素可以用于循环遍历集合或数组,并在SQL语句中使用。示例
<select id="getUserList" resultType="User">
SELECT * FROM users
WHERE id IN
<foreach collection="userIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
上述示例中,foreach元素会将userIds集合中的每个元素拼接到IN条件中,生成类似于WHERE id IN (1, 2, 3)的SQL语句。
trim元素:
trim元素可以用于去除SQL语句的开头或结尾的特定字符串,并根据条件添加新的字符串。示例
<select id="getUserList" resultType="User">
SELECT *
FROM users
<trim prefix="WHERE" prefixOverrides="AND |OR ">
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</trim>
</select>
上述示例中,trim元素会去除开头的WHERE,并根据条件动态添加AND name = #{name}和AND age = #{age}。
通过使用这些动态SQL语句的方式,可以根据不同的条件生成灵活的SQL语句,提高查询的灵活性和可维护性。这些方式可以组合使用,根据实际需要进行灵活配置