首页 > 作文

mybatis中的test语句失效处理方式

更新时间:2023-04-06 03:19:56 阅读: 评论:0

mybatis test语句失效

正常情况下,写动态sql的if test或when test语句时,条件引用为双引号括单引号

如下:

<lect id="l1" resulttype="ur">     lect * from tb_ur     <where>       <choo>         <when test="ur != null and ur != ''">           and ur = #{ur}         </when>         <when test="passwd != null and passwd != ''"> 学历提升          and passwd = #{passwd}        </when>        <otherwi>          and 1 = 1  加拿大国庆日      </otherwi>      </choo>    </where></lect>

但是今天发现一个问题,当传入的值为0或者1时,sql失效不被执行。

如下:

<when test="ur == '1‘ "> and ur = #{ur}</when>

之后,发现是my安全工程专业batis自身解析的问题,在标签 中的内容,mybatis是使用的ognl表达式来进行解析的,这个地方需要注意下,单引号内有一个字符的情况下,oweregnl会将其以 java 中的 char 类型进行解析,那么此时 char 类型与参数 string 类型用等号进行比较的时候结果都是fal。

解决方案也很简单

就是把test 中的单个字符用双引号括起来。

<if test='param != "*"'>  <choo>     <when test='param.indexof("sub") != -1'>       </when>     <otherwi>          </otherwi>   </choo></if>

mybatis test判断注意事项

在使用mybatis进行判断的时候,一定要注意传入的数据类型与判断的目标值类型是否一致。

最近在一次开发过程,

误将一个传入的整型数据使用了下面专科有学位吗的判断方式

<if test="apptype != null and apptype != ''">    and a.c_apptype = #{apptype}</if>

其中,apptype是一个整型数据。可以看到,在test判断里面使用了 apptype != ”。

在进行业务功能测试的时候发现,当传入的值是0时,该条件筛选没有起作用,通过调试发现,mybatis会将空字符串转换成double类型的0.0

如下图所示:

同样整数数据也会转换为double类型

如下图所示:

所以,mybatis在判断的时候,数字0和空字符串是相等的,而我们的if判断里,是两者不相等时该条件才会起作用。

因此,在使用mybatis判断的时候,一定要注意类型是否一致,数字类型就不要判断空字符串的情况了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。

本文发布于:2023-04-06 03:19:54,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/414986a391213dad3d617a19c272c667.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:mybatis中的test语句失效处理方式.doc

本文 PDF 下载地址:mybatis中的test语句失效处理方式.pdf

标签:类型   发现   条件   所示
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
  • mybatis中的test语句失效处理方式
    mybatis test语句失效正常情况下,写动态sql的if test或when test语句时,条件引用为双引号括单引号如下: