17、动态SQL之<trim>
2018-01-20 23:56
204 查看
在上一节中,像下面写法
and关键字加在每个if语句中国表字段的后面,如果最后一条判断语句失败,会导致整个sql语句最后多一个and关键字。下面可以通过
下面介绍下
prefix : trim标签体中是整个字符串拼串 后的结果。prefix给拼串后的整个字符串加一个前缀。例如上面示例,如果只有id、email和gender语句判断成功的话,
而prefix表示在整个 标签内部包裹的字符串拼接的结果的前面加指定的字符。所以prefix=”where”表示在拼接的结果前面加一个where字符串,所以最后拼接的字符串加上where就变成了:
prefixOverrides : 前缀覆盖: 去掉整个字符串前面多余的字符。例如
当id条件判断失败,其它三个条件判断成功后, 标签包裹的字符串拼接结果为:
拼接的结果中前面多一个and字符串,所以prefixOverrides=”and”的作用就是去掉拼接结果最前面多于的and字符串的。
suffixOverrides : 后缀覆盖:去掉整个字符串后面多余的字符。例如最开始给出的一个例子就是后缀覆盖
当gender的判断条件失败时, 标签包裹的字符串拼接结果为:
字符串的拼接结果的最后多一个and字符串。suffixOverrides=”and”表示去掉拼接结果最后的and字符串的意思。所以
suffix : 后缀,suffix给拼串后的整个字符串加一个后缀 。目前用的甚少,就是在拼接结果的最后加一个字符串。
<select id="getPerson" resultType="com.lzj.bean.Person"> select * from person <where> <if test="id!=null"> id=#{id} and </if> <if test="lastName!=null and lastName!=''"> last_name like #{lastName} and </if> <if test="email!=null and email.trim()!=''"> email=#{email} and </if> <if test="gender==0 or gender==1"> gender=#{gender} </if> </where> </select>
and关键字加在每个if语句中国表字段的后面,如果最后一条判断语句失败,会导致整个sql语句最后多一个and关键字。下面可以通过
<trim>标签去掉多于的这个and关键字。改正如下
<select id="getPerson" resultType="com.lzj.bean.Person"> select * from person <!-- 自定义字符串的截取规则,去掉最后一个and --> <trim prefix="where" suffixOverrides="and"> <if test="id!=null"> id=#{id} and </if> <if test="lastName!=null and lastName!=''"> last_name like #{lastName} and </if> <if test="email!=null and email.trim()!=''"> email=#{email} and </if> <!-- ognl会进行字符串与数字的转换判断 "0"==0 --> <if test="gender==0 or gender==1"> gender=#{gender} </if> </trim> </select>
下面介绍下
<trim>标签中的4个属性:
prefix : trim标签体中是整个字符串拼串 后的结果。prefix给拼串后的整个字符串加一个前缀。例如上面示例,如果只有id、email和gender语句判断成功的话,
<trim>标签中的sql语句拼接结果为:
id=#{id} and email=#{email} and gender=#{gender}
而prefix表示在整个 标签内部包裹的字符串拼接的结果的前面加指定的字符。所以prefix=”where”表示在拼接的结果前面加一个where字符串,所以最后拼接的字符串加上where就变成了:
where id=#{id} and email=#{email} and gender=#{gender}
prefixOverrides : 前缀覆盖: 去掉整个字符串前面多余的字符。例如
<select id="getPerson" resultType="com.lzj.bean.Employee"> select * from tbl_employee where <!--去掉拼接后的多于的and字符--> <trim prefixOverrides="and"> <if test="id!=null"> id=#{id} </if> <if test="lastName!=null and lastName!=''"> and last_name like #{lastName} </if> <if test="email!=null and email.trim()!=''"> and email=#{email} </if> <if test="gender==0 or gender==1"> and gender=#{gender} </if> </trim> </select>
当id条件判断失败,其它三个条件判断成功后, 标签包裹的字符串拼接结果为:
and last_name like #{lastName} and email=#{email} and gender=#{gender}
拼接的结果中前面多一个and字符串,所以prefixOverrides=”and”的作用就是去掉拼接结果最前面多于的and字符串的。
suffixOverrides : 后缀覆盖:去掉整个字符串后面多余的字符。例如最开始给出的一个例子就是后缀覆盖
<select id="getPerson" resultType="com.lzj.bean.Person"> select * from person <!-- 自定义字符串的截取规则,去掉最后一个and --> <trim prefix="where" suffixOverrides="and"> <if test="id!=null"> id=#{id} and </if> <if test="lastName!=null and lastName!=''"> last_name like #{lastName} and </if> <if test="email!=null and email.trim()!=''"> email=#{email} and </if> <if test="gender==0 or gender==1"> gender=#{gender} </if> </trim> </select>
当gender的判断条件失败时, 标签包裹的字符串拼接结果为:
id=#{id} and last_name like #{lastName} and email=#{email} and
字符串的拼接结果的最后多一个and字符串。suffixOverrides=”and”表示去掉拼接结果最后的and字符串的意思。所以
<trim prefix="where" suffixOverrides="and">表示把拼接的结果
id=#{id} and last_name like #{lastName} and email=#{email} and前面加where字符串,后面去掉and字符串,最后变为:
where id=#{id} and last_name like #{lastName} and email=#{email}
suffix : 后缀,suffix给拼串后的整个字符串加一个后缀 。目前用的甚少,就是在拼接结果的最后加一个字符串。
相关文章推荐
- MyBatis动态SQL <trim></trim>标签的明白理解
- Mybatis 动态SQL之<trim>,<where>,<set>源码解析
- Mybatis最入门---动态查询( <trim prefix="where" prefixOverrides="and|or"> )
- 22、动态SQL之<bind>标签使用
- Mybatis 最强大的动态sql <where>标签
- MyBatis动态SQL<choose>标签的使用
- Mybatis使用“<trim prefix="SET" suffixOverrides=",">”出现Cause: java.sql.SQLException:
- <Ibatis in action>中使用动态SQL的一个小细节提示(与CDATA)
- mybatis中sql中的特殊符号<trim prefix="" suffix="" suffixOverrides="" prefixOverrides=""></trim>
- 20、动态SQL之<foreach>标签
- 6.1 Mybatis实现动态SQL——<if></if>使用
- 18、动态SQL之<choose><when><otherwise>标签
- 19、动态SQL之<set><if>标签的使用
- 在ibatis动态sql中的< 、> 、<>等比较符号的处理
- mybatis(ibatis)中的动态sql<dynamic prepend="where"><isNotEmpty>的讲解
- mybati(ibatis)中的动态sql <dynamic prepend="where">的详解
- 16、动态SQL之<where>、<if>条件判断
- SQL提高旅程1->动态SQL exec的替代者Sp_ExecuteSql
- mybatis动态sql中的trim标签的使用
- JSP<include>静态引入和动态引入