首页 > 其他分享 >mybatis Integer字段值传0,判断不等于空字符串,识别成空字符串排查解决

mybatis Integer字段值传0,判断不等于空字符串,识别成空字符串排查解决

时间:2024-12-05 18:54:55浏览次数:8  
标签:11 mapper 15 22 成空 mybatis 值传 字符串

mybatis Integer字段值传0,判断不等于空字符串,识别成空字符串排查解决

根本原因:
mybatis将传入的Integer类型的0被识别成空字符串

在mbatis中使用Xml配置sql语句时,出现了这样一个问题。入的参数为0去做判断时,mybatis会把参数0当成是空字符串去判断而引起查询结果错误。

insert into book
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="sno != null" >
        sno,
      </if>
      <if test="sname != null" >
        sname,
      </if>
      <if test="weekRentDiscountFlag != null and weekRentDiscountFlag != ''" >
        week_rentDiscount_flag,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="sno != null" >
        #{sno,jdbcType=INTEGER},
      </if>
      <if test="sname != null" >
        #{sname,jdbcType=VARCHAR},
      </if>
      <if test="weekRentDiscountFlag != null and weekRentDiscountFlag != ''" >
        #{weekRentDiscountFlag,jdbcType=VARCHAR},
      </if>
    </trim>

这样写,当weekRentDiscountFlag =0时,mybatis将不会增加该条件新增,因为mybatis框架会将weekRentDiscountFlag 识别为空字符串。

打印项目中的执行SQL,发现weekRentDiscountFlag=0的时候,不会添加值。

2024-11-22 15:15:49.617 DEBUG 4744 --- [           main] c.s.mapper.BookMapper.insertSelective    : ==>  Preparing: insert into book ( sno, sname ) values ( ?, ? ) 
2024-11-22 15:15:49.731 DEBUG 4744 --- [           main] c.s.mapper.BookMapper.insertSelective    : ==> Parameters: 126(String), test1(String)
2024-11-22 15:15:49.759 DEBUG 4744 --- [           main] c.s.mapper.BookMapper.insertSelective    : <==    Updates: 1

修改之后:去掉 and weekRentDiscountFlag != '' 条件

insert into book
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="sno != null" >
        sno,
      </if>
      <if test="sname != null" >
        sname,
      </if>
      <if test="weekRentDiscountFlag != null" >
        week_rentDiscount_flag,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="sno != null" >
        #{sno,jdbcType=INTEGER},
      </if>
      <if test="sname != null" >
        #{sname,jdbcType=VARCHAR},
      </if>
      <if test="weekRentDiscountFlag != null" >
        #{weekRentDiscountFlag,jdbcType=VARCHAR},
      </if>
    </trim>

打印SQL日志如下:

2024-11-22 15:11:58.351 DEBUG 1432 --- [           main] c.s.mapper.BookMapper.insertSelective    : ==>  Preparing: insert into book ( sno, sname, week_rentDiscount_flag ) values ( ?, ?, ? ) 
2024-11-22 15:11:58.464 DEBUG 1432 --- [           main] c.s.mapper.BookMapper.insertSelective    : ==> Parameters: 126(String), test1(String), 0(Integer)
2024-11-22 15:11:58.476 DEBUG 1432 --- [           main] c.s.mapper.BookMapper.insertSelective    : <==    Updates: 1

解决方案:
1、更改if判断条件:当传入的参数有0时,只判断!=null即可。
2、将字段类型转化为String类型。

标签:11,mapper,15,22,成空,mybatis,值传,字符串
From: https://www.cnblogs.com/oktokeep/p/18589182

相关文章

  • 字符串函数和内存函数
    字符串函数1、strlcpy 【字符串拷贝】(将原字符串中的字符拷贝到目标字符数组中,包括终止符号\0,并在这里停止;为了避免越界,目标字符串数组应该足够大去接收)......
  • 05-字符串
    05-字符串由英文双引号(DoubleQuote)引起来的一串字符称为字符串字面值(StringLiteral),或者简称字符串。【注】C语言中没有字符串类型!!!"abcdefghijklmnopqrstuvwxyz"一、证明(\0)字符串的结束标志是一个\0(转义字符),被隐藏起来了。【注】在计算字符串长度的时候\0是结束标志,不......
  • 反转字符串中每个单词的字符顺序,但保持单词之间的相对顺序不变(C++)
     需求:用户输入一行字符(一个英语句子lastweek,Iwenttocinima.),将该行字符按照每个单词逆序输出(即输出:tsalkeew,Itnewotaminic.)。要求1.写一个函数用来实现每个单词的字符顺序颠倒,拿到头和尾,对代码进行遍历(判断是否为单词首字母:当前为字母,前面是空格或者什么都没有;判......
  • SQL按指定字符分割字符串
    在SQL中分割字符串通常需要使用特定的函数,因为SQL本身并不像编程语言那样直接支持字符串分割。不同的数据库系统有不同的函数来处理字符串分割。以下是一些常见数据库系统中分割字符串的方法:1.MySQL在MySQL中,你可以使用SUBSTRING_INDEX()函数来分割字符串。这个函数接受......
  • 字符串的截取、替换、切割方法
    1.截取subString()subString()方法有两种使用方式:1.第一种是在括号里只放入一个索引,这时将会从放入的索引为起点,一直截取到末尾2.第二种是在括号里放入两个索引,分别对应截取的头和尾,其中截取不包括尾。如:(0,4),这样只会从索引0开始截取到索引3练手明明使用了截取方法,控制台打印的......
  • 28. 找出字符串中第一个匹配项的下标
    题目:https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/description/思路:使用KMP算法Java代码如下:importjava.util.Scanner;classSolution{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);String......
  • 1203-同构字符串
    同构字符串leetcode205题目大意:给定两个字符串,判断是否为同构的字符串,字符间的对应关系一样,例如paper于title解题思路:使用两个hashmap分别做映射,当新字符在两个map中出现了key但是value不是对应的那个字符的话,就返回false,否则返回trueclassSolution{publicboolean......
  • 判断字符串是否为回文
    判断字符串是否为回文二、C语言实现三、C++实现四、Java实现五、Python实现......
  • [数组滑动窗口] 0438. 找到字符串中所有字母异位词
    文章目录1.题目链接2.题目大意3.示例4.解题思路5.参考代码1.题目链接https://leetcode.cn/problems/find-all-anagrams-in-a-string/description/2.题目大意描述:给定两个字符串s和p。要求:找到s中所有p的异位词的子串,返回这些子串的起始索引。......
  • DevEco Studio 实战第一节:字符串拼接与组件构建
    DevEcoStudio实战第一节:字符串拼接与组件构建引言在现代软件开发中,TypeScript提供了强类型的优势,而DevEcoStudio作为华为推出的开发集成环境,提供了便捷的代码管理和版本控制功能。本文将通过一个简单的示例,介绍如何在TypeScript和DevEcoStudio中进行字符串拼接......