一 常见的
MyBatis 是一个流行的 Java 数据持久化框架,它提供了灵活的动态 SQL 查询功能,让开发者可以根据需要构建动态的 SQL 查询语句。下面是 MyBatis 中常用的动态 SQL 构建方式:
- if 元素:用于根据条件判断是否包含某个 SQL 字段或语句。示例:
```xml
<select id="getUserList" resultType="User">
SELECT * FROM user
WHERE 1 = 1
<if test="userName != null">
AND user_name = #{userName}
</if>
<if test="gender != null">
AND gender = #{gender}
</if>
</select>
```
- choose, when, otherwise 元素:用于构建类似于 switch-case 语句的动态 SQL。可以根据条件选择不同的 SQL 语句执行。示例:
```xml
<select id="getUserList" resultType="User">
SELECT * FROM user
WHERE 1 = 1
<choose>
<when test="userName != null">
AND user_name = #{userName}
</when>
<when test="gender != null">
AND gender = #{gender}
</when>
<otherwise>
AND status = 'ACTIVE'
</otherwise>
</choose>
</select>
```
- where 元素:用于动态生成 WHERE 子句,并且会自动去除多余的 AND 或 OR。示例:
```xml
<select id="getUserList" resultType="User">
SELECT * FROM user
<where>
<if test="userName != null">
AND user_name = #{userName}
</if>
<if test="gender != null">
AND gender = #{gender}
</if>
</where>
</select>
```
- set 元素:用于动态生成 UPDATE 语句中的 SET 子句。示例:
```xml
<update id="updateUser" parameterType="User">
UPDATE user
<set>
<if test="userName != null">
user_name = #{userName},
</if>
<if test="gender != null">
gender = #{gender},
</if>
</set>
WHERE id = #{id}
</update>
```
- foreach 元素:用于遍历集合或数组,并将集合或数组的元素动态替换进 SQL 语句中。示例:
```xml
<select id="getUserList" resultType="User">
SELECT * FROM user
WHERE id IN
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}
</foreach>
</select>
```
除了上述的元素,MyBatis 还提供了许多其他的动态 SQL 构建方式,如动态拼接 SQL 字符串等。这些方式可以根据实际需求来选择使用,以便构建灵活、可复用的动态 SQL 查询语句。