18、mybatis-动态sql-trim、where、set
2019-08-20 本文已影响0人
唯老
二、where
1、说明
根据条件判断添加where后面的筛选条件
2、语法结构
<where>
....
</where>
3、栗子
int findUserByWhere(@Param("name") String name, @Param("phone") String phone);
<select id="findUserByWhere" resultType="User">
SELECT * FROM user
<where>
<if test="name != null and name != ''">
AND name LIKE concat('%', #{name}, '%')
</if>
<if test="phone !=null and phone !=''">
OR phone=#{phone}
</if>
</where>
</select>
三、set(更新专用)
1、说明
set元素主要是用在更新操作的时候,它的主要功能和where元素相似,主要是在set元素所在位置输出一个set关键字,而且还可以去除内容结尾中无关的逗号。
2、语法结构
<update...>
update 表
<set>
动态追加更新字段
<if test="条件判断"></if>
<if test="条件判断"></if>
<if test="条件判断"></if>
...
</set>
...
</update>
3、栗子
int updateUser(@Param("user") User user);
<update id="updateUser">
UPDATE user
<set>
<if test="user.email != null and user.email != ''">email=#{user.email},</if>
<if test="user.phone != null and user.phone != ''">phone=#{user.phone}</if>
</set>
WHERE uid=#{user.uid}
</update>
三、trim
1、说明
可以在自己包含的内容前加上某前缀,也可以在其后加上某些后缀,预制对应的属性是prefix和suffix;
可以把包含内容的首部某些内容过滤,即忽略,也可以把尾部的某些内容过滤,对应的属性是prxfixOverrides和suffixOverridex;
正因为trim有上述功能,所有我们也可以非常简单的利用trim里代替where和set元素的功能
2、语法结构
<trim prefix="WHERE" prefixOverrides="AND|OR">
...
</trim>
<!-等价于set元素>
<trim prefix="SET" prefixOverrides=",">
...
</trim>
属性
属性 | 说明 |
---|---|
prefix | 前缀 |
prefixoverride | 去掉第一个“and”或者是 “or” |
suffixoverride | 去掉最后标记的字符 如 , |
suffix | 后缀 |
3、栗子
查询
User findUserByTrimWhere(@Param("name") String name, @Param("phone") String phone);
<select id="findUserByTrimWhere" resultMap="BaseResultMap">
SELECT * FROM user
<trim prefix="WHERE" prefixOverrides="AND | OR">
<if test="name != null and name != '' ">
AND NAME LIKE concat('%', #{name}, '%')
</if>
<if test="phone !=null and phone !=''">
OR phone=#{phone}
</if>
</trim>
</select>
<!-- SELECT * FROM user WHERE NAME LIKE concat('%', ?, '%') -->
更新
int updateUserTrim(@Param("user") User user);
<update id="updateUserTrim">
UPDATE user
<trim prefix="SET" suffixOverrides=",">
<if test="user.email != null and user.email != ''">email=#{user.email},</if>
<if test="user.phone != null and user.phone != ''">phone=#{user.phone}</if>
</trim>
WHERE uid =#{user.uid}
</update>