Mybatis值trim标签

        Mybatis具有实现动态SQL的能力,使用这个特性免不了会用到trim这个标签,trim标签的功能简单来说就是自定义格式拼凑SQL语句。
        trim有4个属性:

prefix:表示在trim包裹的SQL前添加指定内容
suffix:表示在trim包裹的SQL末尾添加指定内容
prefixOverrides:表示去掉(覆盖)trim包裹的SQL的指定首部内容
suffixOverrides:表示去掉(覆盖)trim包裹的SQL的指定尾部内容

来看例子:
查找某个用户,通过名字和年龄

public User getUser(@Param("LastName") String lastName,@Param("age") Integer age,@Param("phone") String phone);

对应xml,先看首先想到的:

<select id="getUser" result="user">
	select * from user_tab where last_name=#{lastName} and age=#{age} and phone=#{phone}
select>

执行时输出的SQL语句
在这里插入图片描述

  1. prefix
<select id="getUser" resultType="user">
	select * from user_tab 
	<trim prefix="where">
		last_name=#{lastName} and age=#{age} and phone=#{phone}
	trim>
select>

输出同样SQL,这个就是prefix的效果
在这里插入图片描述

  1. prefixOverrides
    当然实际使用时查找条件都需要做一些判断,最基本的是否为null。
<select id="getUser" resultType="user">
	select * from user_tab 
	<trim prefix="where">
		<if test="lastName != null">
			last_name=#{lastName}
		if>
		<if test="age != null">
			and age=#{age}
		if>
		<if test="phone != null">
			and phone=#{phone}
		if>
	trim>
select>

执行语句与上面一样,但是假如现在lastName参数为null,我们再看:

// 查询
User user = userMapper.getUser(null, 12,"120");

在这里插入图片描述
因为lastName为null,所以第一个if不成立里面的SQL语句不拼接,第二个if里面的and边紧跟在where后面了,语法错误,这是只要加上prefixOverride即可,把首个“and”去掉

<select id="getUser" resultType="user">
	select * from user_tab 
	<trim prefix="where" prefixOverrides="and">
		<if test="lastName != null">
			last_name=#{lastName}
		if>
		<if test="age != null">
			and age=#{age}
		if>
		<if test="phone != null">
			and phone=#{phone}
		if>
	trim>
select>

在这里插入图片描述
如果是先要去掉and获取or,则必须这样写prefixOverrides=“and |or”,注意中间的空格。

  1. suffix、suffixOverrides
    上面查找,这里来看更新
// 根据id来更新
public void updateUser(@Param("user") User user);

对应的xml


<update id="updateUser">
	update user_tab
	set last_name=#{lastName},age=#{age},phone=#{phone}
	where id=#{id}
update>

使用suffix,并加上条件判断

<update id="updateUser">
	<trim suffix="where id=#{id}">
		update user_tab
		set
		<if test="lastName != null">
			last_name=#{lastName},
		if>
		<if test="age != null">
			age=#{age},
		if>
		<if test="phone != null">
			phone=#{phone}
		if> 
	trim>
update>

执行输出跟上面的普通版语句一样没问题,可以看到suffix的效果
在这里插入图片描述
同样的假如phone为null了,

// 更新
userMapper.updateUser(new User(2, "jack", 20, null));

在这里插入图片描述
因为最会一个if条件不成立,所以倒数第二个if里面的逗号在where的左侧语法错误,此时使用suffixOverrides即可

<update id="updateUser">
	<trim suffix="where id=#{id}" suffixOverrides=",">
		update user_tab
		set
		<if test="lastName != null">
			last_name=#{lastName},
		if>
		<if test="age != null">
			age=#{age},
		if>
		<if test="phone != null">
			phone=#{phone}
		if> 
	trim>
update>

再次执行输出,成功执行,这个就是suffixOverrides的作用
在这里插入图片描述

好了,这个就是trim标签即属性的基本介绍,具体怎么使用看实际情况,上面只是作为演示。

你可能感兴趣的:(mybatis)