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>

遇到的坑,整整差不多苦了大半天,呵呵,暂时简单总结和记录到这里。

时间: 2024-11-06 23:55:34

MyBatis 判断条件为等于的问题的相关文章

MyBatis 判断条件为等于的时候,常量需要加 .toString()

当MyBatis 判断条件为等于的时候,常量需要加 .toString() 来转换,这种方法是稳定的,推荐使用,比如: <!-- 正确的,稳定,推荐使用 --> <if test="newsImage != null and newsImage == '0'.toString()"> <![CDATA[ and len(newsImage) > 0 ]]> </if> 参考网址

[Shell]if 常用判断条件

IF 判断 之前也写过简单的shell脚本,也不是转职运维,和系统相关的工作比较少,所以不怎么熟练. 最近由于系统总是出现各种乱七八糟的问题,也没有人来协助,只好自己写shell脚本了,都是些基础的脚本,但由于shell的语法和通常的高级语言有些不一样,所以还是要系统的看下常用的部分. if语句就是很重要的一个. 这种文章很多,只是拿来主义,如果有心得体会也会加上,小计下以后备查. 基本结构:  if语句块需要使用if结束 if condition then statements elif co

Shell中条件判断语法与判断条件

一,简介 Shell各种判断结构和运算符的用法是shell编程的基础,了解shell的判断.运算符和一些退出状态 对后面的学习有很重要的影响.shell有一个内部命令test经常用于对判断语句 进行测试一种或几种状态的条件是否成立 二. 判断条件 (1)Linux的shell中的测试命令,用于测试某种条件或某几种条件是否真实存在 测试命令是判断语句和循环语句中条件测试的工具,对判断和运算符的比较测试有很大的帮助. (2)测试条件为真,返回一个0值:      为假,返回一个非0整数值 测试命令有

mybatis plus条件拼接

mybatis plus条件拼接条件构造器案例tableAbstractWrapperallEq:全部eq(或个别isNull)eq:等于 =ne:不等于 <>gt:大于 >ge:大于等于 >=lt:小于 <le:小于等于 <=between:BETWEEN 值1 AND 值2notBetween:NOT BETWEEN 值1 AND 值2like:LIKE '%值%'notLike:NOT LIKE '%值%'likeLeft:LIKE '%值'likeRight:L

.Net程序员之Python基础教程学习----判断条件与循环[Fourth Day]

    今天学习Python的判断条件与循环操作. 一. 布尔变量: 在学习判断条件之前必须的了解bool变量,在Python中bool变量与C语言比较类似,与.net差别比较大,其中下面集中情况需要记住. False, '', 0, (), [],{},None 为空,而True,12,'hello',[1] 这些普遍都为真. 其实可以简单理解为,无即是false,有既是true >>> bool(True) True >>> bool(0) False >&g

STL--G - For Fans of Statistics(两个判断条件-二分)

G - For Fans of Statistics Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Description Have you ever thought about how many people are transported by trams every year in a city with a ten-million population

ThinkPHP3.2中if判断条件是两个变量

<select name="typeId"> <foreach name="typeInfo" item="v"> <if condition="$v[typeId] eq $article[typeId]"> <option value="{$v.typeId}" selected>{$v.name}</option> <else/>

Shell脚本IF条件判断和判断条件总结

转自:http://m.jb51.net/article/56553.htm 这篇文章主要介绍了Shell脚本IF条件判断和判断条件总结,本文先是给出了IF条件判断的语法,然后给出了常用的判断条件总结,需要的朋友可以参考下 前言:      无论什么编程语言都离不开条件判断.SHELL也不例外. if list then           do something here       elif list then           do another thing here       e

vba中if判断条件里等号无法完成赋值操作

今天遇到一个问题,结果发现是因为vba中if的判断条件中等号("=")无法完成赋值操作造成的. 举个栗子: 故应该在if之前就完成必要的赋值操作: 所以,if判断条件里的等号("=")只能用于判断相等,不能用于赋值.