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>
上一篇 下一篇

猜你喜欢

热点阅读