练习常用动态sql的标签<if>、<where>、<set>、<trim>、<foreach> (编程题)50
时间: 2023-08-06 15:05:48 浏览: 103
假设有一个User类,包含属性id、name、age、gender和address。现在需要根据不同的条件查询用户信息,其中可能根据id和name查询单个用户,也可能根据age和gender查询多个用户,还可能根据address查询所有用户。同时,也需要支持根据id、name、age、gender和address更新用户信息。以下是使用常用动态SQL标签实现的Mapper接口和Mapper XML文件:
UserMapper接口:
```java
public interface UserMapper {
List<User> getUserListByCondition(User user);
List<User> getUserListByIds(List<Integer> ids);
int updateUser(User user);
}
```
UserMapper XML文件:
```xml
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserListByCondition" parameterType="com.example.entity.User" resultType="com.example.entity.User">
SELECT * FROM user
<where>
<if test="id != null">
AND id = #{id}
</if>
<if test="name != null and name != ''">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="age != null">
AND age = #{age}
</if>
<if test="gender != null and gender != ''">
AND gender = #{gender}
</if>
<if test="address != null and address != ''">
AND address = #{address}
</if>
</where>
</select>
<select id="getUserListByIds" parameterType="java.util.List" resultType="com.example.entity.User">
SELECT * FROM user
WHERE id IN
<foreach item="id" collection="list" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<update id="updateUser" parameterType="com.example.entity.User">
UPDATE user
<set>
<if test="name != null and name != ''">
name = #{name},
</if>
<if test="age != null">
age = #{age},
</if>
<if test="gender != null and gender != ''">
gender = #{gender},
</if>
<if test="address != null and address != ''">
address = #{address},
</if>
</set>
WHERE id = #{id}
</update>
</mapper>
```
说明:
- getUserListByCondition方法使用<where>和<if>标签实现了根据不同条件查询用户信息的功能。如果某个条件不满足,则会忽略该条件。
- getUserListByIds方法使用<foreach>标签实现了根据多个id查询用户信息的功能。其中,collection属性指定了要查询的id列表,item属性指定了在循环中要使用的变量名,open、separator和close属性则指定了生成的SQL语句中的括号、分隔符和结束符号。
- updateUser方法使用<set>和<if>标签实现了根据不同属性更新用户信息的功能。如果某个属性值为null或空字符串,则会忽略该属性。
阅读全文