MyBatis 判断条件为等于的问题
在用MyBatis操作数据库的时候相信很多人都用到,当在判断null, 大于,大于等于,小于,小于等于,不等于时估计很多都用到,比较容易实现了,这里就省略了,但唯独判断条件为等于时估计蛮多人遇到坑了, 俺在这个问题上坑了差不多一天,于是把这个实验总结并简要记录一下;
当MyBatis 判断条件为等于的时候,常量需要加 .toString() 来转换,这种方法是稳定的,推荐使用,比如:

<!-- 正确的,稳定,推荐使用 -->
<if test="newsImage != null and newsImage == '1'.toString()">
<![CDATA[ and len(newsImage) > 0 ]]>
</if>
其中判断 newsImage == '1' 时,人为认为成功,但实际上是不成功的,需要改为 newsImage == '1'.toString()方可成功,原因具体没有细入研究,根据实际使用推测应该是 “等于” 在java中是个比较复杂问题,涉及的“等于”有可能是变量地址相等,或者是变量值内容相等,在XML文件中简单的 == 在经过MyBatis处理后无法判断是哪种类型的“相等”,所以加.toString()做强制转换操作,MyBatis就知道是值内容的比较,当然就成功了; 注意这个常量不限于数字,对于字母,如 'y' 同样需要加上 .toString()方可成功,如下:

<!-- 正确的,稳定,推荐使用 -->
<if test="newsImage != null and newsImage == 'y'.toString()">
<![CDATA[ and len(newsImage) > 0 ]]>
</if>
那给变量加 .toString() 可以吗?这个是错误的,至少实际在所使用的myBatis版本(mybatis-3.2.5.jar,mybatis-spring-1.2.1.jar)是不可以,以后版本不知道,这应该是在经过 myBatis 时,影响到其转换操作,故出现错误,如下是错误的:

<!-- 错误的 -->
<if test="newsImage != null and newsImage.toString() == 'y'">
<![CDATA[ and len(newsImage) > 0 ]]>
</if>
既然是值内容的比较,我们自然联想到 Java 的 equals , equalsIgnoreCase 关键字,用这个可以吗? 实际测试过,有时成功,有时不成功(有可能跟我的机子和我使用的Java环境的原因),很不稳定,不推荐使用,所以如下是不稳定的:

<!--有时成功,有时不成功,不推荐使用-->
<if test="newsImage != null and newsImage.equal('y')">
<![CDATA[ and len(newsImage) > 0 ]]>
</if>
遇到的坑,整整差不多苦了大半天,呵呵,暂时简单总结和记录到这里。
MyBatis 判断条件为等于的问题的更多相关文章
- MyBatis 判断条件为等于的时候,常量需要加 .toString()
当MyBatis 判断条件为等于的时候,常量需要加 .toString() 来转换,这种方法是稳定的,推荐使用,比如: <!-- 正确的,稳定,推荐使用 --> <if test=& ...
- shell中条件判断语法与判断条件小结
1. IF条件判断语法: if Athen dosthelif B dosthelse dosthfi 2. 判断条件: 2.1 字符串判断 str1 = str2 当两个串有相同 ...
- shell 脚本——判断条件
在之前的shell语言学习笔记中已经写过shell的几种判断语句及循环语句,也简单的介绍了shell语言判断语句和判断条件.在此再做进一步学习. test命令的测试功能 test命令用于检测系统文件及 ...
- Linux if 命令判断条件总结
Linux if 命令判断条件总结Linux if命令 关于文件属性的判断式 -a 如果文件存在 -b 如果文件存在,且该文件是区域设备文件 -c 当file存在并且是字符设备文件时返回真 -d 当p ...
- if语句中的判断条件(nginx)
if语句中的判断条件 正则表达式匹配: ==:等值比较; ~:与指定正则表达式模式匹配时返回"真",判断匹配与否时区分字符大小写: ~*:与指定正则表达 ...
- js判断变量是否等于undefined
js中判断变量是否等于undefined,不是使用==,而是使用typeof. typeof(featureId)!="undefined"
- ThinkPHP3.2中if判断条件是两个变量
<select name="typeId"> <foreach name="typeInfo" item="v"> ...
- SQL语句Where中使用别名作为判断条件
当我们使用某个表达式作为输出的一列时,我们无法再Where条件中直接使用该列作判断条件. 例如下面的SQL语句: select id, (c1 + c2) as s from t1 where ...
- .Net程序员之Python基础教程学习----判断条件与循环[Fourth Day]
今天学习Python的判断条件与循环操作. 一. 布尔变量: 在学习判断条件之前必须的了解bool变量,在Python中bool变量与C语言比较类似,与.net差别比较大,其中下面集中情况需要 ...
随机推荐
- ADB 在 Android SDK 的中的路径
以前 adb.exe 是在 sdk/tools 目录下 现在 安装 sdk 之后, 需要打开 SDK Manager 下载 `Android SDK Platform-tools` 然后, 在 sdk ...
- gradle编译andoroid
下载sdk ,api, build tool 1. 取消离线模式 2. 取消代理模式
- Unable to get setting value Parameter name: profileName
Today when I am building my application, everything works well but when I try to run Azure Worker Ro ...
- log file switch (checkpoint incomplete)
接手了一个新交接的库,alert日志频繁报告log file switch (checkpoint incomplete)事件 oracle文档解释: Waiting for a log switch ...
- IDEA文件编码修改
上图标注 1 所示,IDE 的编码默认是 UTF-8,Project Encoding 虽然默认是 GBK,但是一般我都建议修改为 UTF-8.上图标注 2 所示,IntelliJ IDEA 可以对 ...
- C++ set容器简单用法
set是关联容器,类似于集合,里面的元素不会重复,而且呈现为有序性 常用操作: using namespace std; set<int>:s;1.元素插入:s.insert()2.中序遍 ...
- ScrollView属性总结
结构 继承关系 public class ScrollView extends FrameLayout java.lang.Object android.view.View android.view. ...
- JDBCTest
package com.atguigu.spring.jdbc; import java.sql.SQLException; import java.util.ArrayList; import ja ...
- Junit单元测试-环境配置
JUnit是Java单元测试框架,已经在Eclipse中默认安装.目前主流的有JUnit3和JUnit4.JUnit3中,测试用例需要继承TestCase类.JUnit4中,测试用例无需继承TestC ...
- 夺命雷公狗---node.js---10之POST的接收
首先我们在项目下创建一个表单,代码如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta ...