MyBatis if test 判断字符串相等不生效问题

目录
  • MyBatis if test 判断字符串相等不生效
    • 原因分析
    • 解决方法
  • MyBatis if test 判断字符串相等的坑
    • 1. if 判断字符串
    • 2. if嵌套

MyBatis if test 判断字符串相等不生效

采用 MyBatis 框架操作 MySQL 数据库时,判断传入的字符串 priceFlag 值为"0"时,按照 price 属性降序排列,如下 xml 语句未生效:

<if test="priceFlag != null and priceFlag == '0'">
      ORDER BY price DESC
</if>

原因分析

MyBatis 是使用 OGNL 表达式来进行解析的,在 OGNL 表达式中,'0’会被解析成字符,因为 java 是强类型的,char 和 String 不等,所以 if 标签中的 SQL 不会被解析。

解决方法

解决这个问题,可以把 if test 判断语句修改成如下几种方式中的任何一种:

<if test='"0" == priceFlag'>

或者

<if test='"0".equals(priceFlag)'>

或者

<if test="'0'.toString() == priceFlag">

修改完成后,SQL 语句就可以被解析了。

MyBatis if test 判断字符串相等的坑

自己开发的系统,客户反映有问题,本着不想改java代码,想想从数据库入手,加一些判断条件就想到了if test判断等于某个字符串执行另一个sql语句的原则,没想到想当然了,使用 if test=“sex==‘m’”直接报错,看了下网上果然大家都有遇到这样的问题,解决方式如下:

1. if 判断字符串

  • 错误写法:if test="status == 'Y'"特别是数字字符的时候。。。。

结果:抛异常NumberFormatException异常!提示内容非常少,看不出问题在哪里!

  • 正确写法:if test='status == "y" '

还可以这样写:if test="status == 'y'.toString()"

2. if嵌套

        <if test="@com.qbao.tickets.common.util.MybatisUtils@isNotEmpty(firstLetter)">
             <if test="firstLetter=='-1'.toString()">
                and FIRST_LETTER is null or FIRST_LETTER =''
           </if>
           
           <if test="firstLetter!='-1'.toString()">
               and FIRST_LETTER = #{firstLetter, jdbcType=VARCHAR}
           </if>
        </if>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • mybatis if传入字符串数字踩坑记录及解决

    目录 mybatis if传入字符串数字踩坑 正确的写法如下 mybatis if比较字符串相等问题 总结 mybatis if传入字符串数字踩坑 前台页面内容,注意这里的类型为字符串类型的数字 <li>     <label>支付类型:</label>     <form:select path="payType" class="input-medium">         <form:option value

  • Mybatis3 if判断字符串变态写法

    mybatis我们常用的判空操作,出现了常见问题: 错误写法:if test="status == 'Y'" 结果:抛异常NumberFormatException异常!提示内容非常少,看不出问题在哪里! 正确写法:if test='status == "y"' 还可以这样写:if test="status == 'y'.toString()" 或者可以这样写 if test ='status=="Y"' 补充:Mybatis

  • mybatis中 if-test 数字判断的坑及解决

    目录 if-test数字判断的坑 mybatis的test判断注意事项 if-test数字判断的坑 在项目中偶然发现一个判断数字的if没有起任何作用,代码如下 <if test="timeType !=null and timeType!='' and timeType == '3'">     AND     ... </if> 经过查询资料发现,mybatis是用OGNL表达式来解析的,在OGNL的表达式中,数字’3’会被解析成字符,java是强类型的,ch

  • MyBatis if test 判断字符串相等不生效问题

    目录 MyBatis if test 判断字符串相等不生效 原因分析 解决方法 MyBatis if test 判断字符串相等的坑 1. if 判断字符串 2. if嵌套 MyBatis if test 判断字符串相等不生效 采用 MyBatis 框架操作 MySQL 数据库时,判断传入的字符串 priceFlag 值为"0"时,按照 price 属性降序排列,如下 xml 语句未生效: <if test="priceFlag != null and priceFlag

  • mybatis if标签判断不生效的解决方法

    实际需求 <if test="computationRule == '1'"> FROM app_sz_bbb a </if> <if test="computationRule == '2'"> FROM app_ccc a </if> 这种情况不生效, 原因:mybatis是用OGNL表达式来解析的,在OGNL的表达式中,'0'会被解析成字符,java是强类型的,char 和 一个string 会导致不等,所以if

  • mybatis 映射文件中if标签判断字符串相等的两种方式

    mybatis 映射文件中,if标签判断字符串相等,两种方式: 因为mybatis映射文件,是使用的ognl表达式,所以在判断字符串sex变量是否是字符串Y的时候, <if test="sex=='Y'.toString()"> <if test = 'sex== "Y"'> 注意: 不能使用 <if test="sex=='Y'"> and 1=1 </if> 因为mybatis会把'Y'解析为字

  • mybatis的if判断不要使用boolean值的说明

    mybatis的if判断里面最好不要使用boolean值: mybatis会默认把空值转为false.所以如果遇见前段传空值,这个字段在mybatis里面永远就是false了, 可以使用数字类型代替,但是不要使用0作为参数: 补充知识:[MyBatis]<if test=""></if>标签的条件判断(Boolean类型参数) 在MyBatis 中,动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似. 在 MyBatis 3 之前的版本中,有很

  • IOS判断字符串是不是纯数字的方法总结

    前言 在大家开发项目的时候,遇到需求可能是让我们只输入一段纯数字,这时候我们就要对这个字符串进行筛选判断,不符合纯数字进行提示操作,以求达到最好的交互效果也能满足需求. 下面介绍几种判断字符串是否为纯数字的方法 第一种方式是使用NSScanner: 1. 整形判断 - (BOOL)isPureInt:(NSString *)string{ NSScanner* scan = [NSScanner scannerWithString:string]; int val; return [scan s

  • Shell脚本计算字符串长度和判断字符串为空小技巧

    一些需要注意的脚本问题 计算字符串长度可用的三种方法: 复制代码 代码如下: echo "$str"|awk '{print length($0)}' expr length "$str" echo "$str"|wc -c 但是第三种得出的值会多1,可能是把结束符也计算在内了 判断字符串为空的方法有三种: 复制代码 代码如下: if [ "$str" =  "" ] if [ x"$str&qu

  • Java判断字符串为空、字符串是否为数字

    关于 String 的判空: 复制代码 代码如下: //这是对的if (selection != null && !selection.equals("")) {      whereClause += selection;  } //这是错的if (!selection.equals("") && selection != null) {      whereClause += selection;  } 注:"==&qu

  • Java中判断字符串是中文或者英文的工具类分享

    直接上代码: 复制代码 代码如下: import java.util.regex.Matcher; import java.util.regex.Pattern; /**  *  * <p>  * ClassName ShowChineseInUnicodeBlock  * </p>  * <p>  * Description 提供判断字符串是中文或者是英文的一种思路  * </p>  *  * @author wangxu wangx89@126.com

  • MyBatis 动态拼接Sql字符串的问题

    MyBatis 的一个强大的特性之一通常是它的动态 SQL 能力.如果你有使用 JDBC 或其他 相似框架的经验,你就明白条件地串联 SQL 字符串在一起是多么的痛苦,确保不能忘了空格或在列表的最后省略逗号.动态 SQL 可以彻底处理这种痛苦. 动态SQL MyBatis的动态SQL,解决了SQL字符串拼接的痛苦. 1.if <select id="findActiveBlogWithTitleLike" parameterType="Blog" result

随机推荐