以下是trim标签中涉及到的属性:
prefix 。。。。。。。。sql语句加前缀
suffix 。。。。。。。。加后缀
prefixOverrides 。。。去除多余的前缀
suffixOverrides 。。。。去除多余的后缀
<trim prefix="(" suffix=")" suffixOverrides=",">
哈哈哈哈,上面的
prefix="(" 是在sql 语句前加前括号
suffix=")" 是在sql语句后加收括号
刚开始一直纠结干嘛写括号还打引号~ 蠢了一下
下面是很好的例子,可以敲下
一、使用trim标签去除多余的逗号
<update id="updateUser" parameterType="com.course.model.User">
update user
<trim prefix="set" prefixOverrides=",">
<if test="userName !=null and userName !=''">
userName=#{userName}
</if>
<if test="passWord !=null and passWord !=''">
passWord=#{passWord}
</if>
<if test="age !=null and age !=''">
age=#{age}
</if>
<if test="sex !=null and sex !=''">
sex=#{sex}
</if>
<if test="permission !=null and permission !=''">
permission=#{permission}
</if>
<if test="isDelete !=null and isDelete !=''">
isDelete=#{isDelete}
</if>
</trim>
where id=#{id}
</update>
<select id="getUserList" resultType="com.course.model.User" parameterType="com.course.model.User">
select * from user
<trim prefix="where" prefixOverrides="and">
<if test="sex !=null and sex !=''">
and sex=#{sex}
</if>
<if test="age !=null and age !=''">
and age=#{age}
</if>
</trim>
</select>
后面我又傻了 为什么要判断是空 还要判断是不是空字符串,有啥区别吗?
userName !=null and userName !=''"
null代表堆内存中根本没有这个东西,
而空字符串就完全不同了,空字符串也是字符串,他是有内存空间的,
String aaa = null;
String bbb = “”;
然后调用String的方法比如说
aaa.indexOf(“a”);
bbb.indexOf(“a”);
这样的话,字符串aaa在调用indexOf的时候会报空指针异常,而bbb则不会。
因为aaa在堆内存中不存在,无法调用方法,而bbb是存在的。
你可以这么想,一个残疾人,虽然他是残疾的,
但是他还是可以调用他的方法,他可以吃饭,
但是如果这个人都不存在了,吃饭更无法执行了。