mybatis修改int型数据无法修改成0的解决

目录
  • mybatis修改int型数据无法修改成0
    • 场景如下
    • 过程如下
    • 解决方法
  • mybatis int类型值为0判空
    • 问题现状
    • 问题原因
    • 解决方法

mybatis修改int型数据无法修改成0

今天遇到一个很奇葩的问题,修改user实体里面的一个int型的状态量1.2.3........都可以修改成功,唯独参数为0时修改不成功,控制台也没有报错,一切正常。项目用的是ssm框架。最后找到问题是出在mybatis的mapper.xml里了。

场景如下

修改status的值,0为禁用,1为启用。当传入的值为0时,就会修改失败。

过程如下

这是mybatis更新语句中的修改状态量部分,查阅资料后得知问题出在status='' 这里,如果有这个条件则当参数为0时判断结果为false,则不会将0 set进数据库。(折腾了一晚上没有成功配置log4j打印mybatis解析出的sql语句,这里无法展示sql语句)具体原因还得参考源码才能找到答案,由于本人能力有限这里还是留给以后的自己和各位大牛查找吧。

解决方法

1.去掉status='' 即<if test="status != null">即可

2.改写成 <if test="status != -1">

mybatis int类型值为0判空

问题现状

项目开发时经常遇到status值的判断情况,status通常设置为int型,根据不同的status设置不同的条件用于查询或者编辑。Mybatis中经常设置非空作为if的判断条件,常见书写为:

<if test="status!=null and status!='' ">
   status = #{status},
<if>

执行查询及编辑当status=0时,查询结果没有查出status=0的用户信息,编辑用户的状态也没有修改成功,但是后台显示传值正确(后台打印信息如下所示)。

修改用户信息

{id=22, username=wangzichun, password=******, email=, telephone=45643, roleId=2, status=0}

问题原因

当status值为0时,Mybatis将作为if条件中的false结果,即不执行此if里面的内容,所以当status=0时,if条件中的设置的过滤或者修改字段及字段取值没有设置成功,导致查询和编辑status=0时不成功。

解决方法

将status的if条件设置为<if test="status = -1">或者只写<if test="status !=null">

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

(0)

相关推荐

  • Mybatis返回int或者Integer类型报错的解决办法

    会报错如下: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Mapper method 'com.bill.springMybatis.dao.UserDao.getUserIdByName attempted to return null from a m

  • Mybatis Integer类型参数值为0时得到为空的解决方法

    今日遇到的问题: 查询版本信息时,由于version是Integer类型,所以当前台选择版本为0时,变成了查询了所有的版本信息. sql片段: </if> <if test="version != null and version != '' "> AND a.version = #{version} </if> 原因: MyBatis因自身原因默认了 Integer类型数据值等于0时 为 ""(空字符串) 解决办法: 1. 某些

  • Mybatis Update操作返回值问题

    后端的数据持久化使用的是 Mybatis ,在做高并发下账户增减余额的时候,打算使用乐观锁来解决这个问题.在获取update操作的返回值时遇到了一个问题,似乎 Mybatis 进行 update 操作得到的 int 返回值并不是影响的行数.这下就尴尬了. 一般而言,我们知道当我们使用 Mybatis 在 mapper 接口中定义 insert delete 等操作,定义一个 int 类型的返回值,通过该值是否为 0 来判断数据库中受影响的行数进而判断操作是否成功. 到底 update 返回值代表

  • mybatis修改int型数据无法修改成0的解决

    目录 mybatis修改int型数据无法修改成0 场景如下 过程如下 解决方法 mybatis int类型值为0判空 问题现状 问题原因 解决方法 mybatis修改int型数据无法修改成0 今天遇到一个很奇葩的问题,修改user实体里面的一个int型的状态量1.2.3........都可以修改成功,唯独参数为0时修改不成功,控制台也没有报错,一切正常.项目用的是ssm框架.最后找到问题是出在mybatis的mapper.xml里了. 场景如下 修改status的值,0为禁用,1为启用.当传入的

  • Mybatis逆工程jar包的修改和打包

    上一篇文章Mybatis逆工程的使用主要是讲了mybatis-generator-core-1.3.2.jar的使用,这一篇我要介绍的是,修改jar包代码,实现生成自定义模板. 1.我们从这里可以下载mybatis-generator-core-1.3.2.jar项目源码 http://maven.outofmemory.cn/org.mybatis.generator/mybatis-generator-core/1.3.2/ 2.在eclipse下导入存在的maven项目,File->Imp

  • 修改Maven settings.xml 后配置未生效的解决

    1. 问题描述: 自己修改了下 ${M2_HOME}/conf/settings.xml中的本地repository地址,但是重新执行mvn的时候发现repository地址并没有改变.那么问题所在? 2. settings.xml文件位置 settings.xml文件一般存在于两个位置: 全局配置: ${M2_HOME}/conf/settings.xml 用户配置: user.home/.m2/settings.xml (note:用户配置优先于全局配置.) 3. 配置优先级: 需要注意的是

  • mybatis判断int是否为空的时候,需要注意的3点

    mybatis判断int是否为空的注意点 1.int为空时会自动赋值0,所以必须用integer作为javaBean的属性值类型. 2.必须注意封装的get.set.也是Integer.不然也会报错. 3.注意好以上两个点,直接用null判断 例子: public class ExcelPutVo { private Integer startTime;// 开始时间 private Integer endTime;// 截止时间 private int sentId;// 下达者id priv

  • C# 修改文件的创建、修改和访问时间的示例

    目录 File 类 举例说明 C#FileInfo类签名 C#FileInfo构造函数 C#FileInfo属性 C#FileInfo方法 举例说明 C#实现修改文件的创建.修改和访问时间方法,主要是用到了File类的SetCreationTime.SetLastWriteTime.SetLastAccessTime几个方法.我们先来介绍一下File类: File 类 命名空间:System.IO 程序集:System.IO.FileSystem.dll 提供用于创建.复制.删除.移动和打开单一

  • mybatis 使用jdbc.properties文件设置不起作用的解决方法

    这样写的时候起作用: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases

  • JavaScript CSS修改学习第三章 修改样式表

    请注意代码和传统的DHTML的区别.在DHTML你通过直接修改页面上的特定元素来改变样式,而这里的代码修改的是样式表.在这里查看W3C DOM-CSS的兼容性列表.定义 一个页面总是包含一个或者几个样式表,一个样式表里面包含一条或者几条规则,一条规则里有详细的样式声明.这个页面的样式表如下: 复制代码 代码如下: <link rel="stylesheet" href="../quirksmode.css"> <style> <!--

  • intellij idea修改maven配置时总是恢复默认配置的解决方法idea版本(2020.2.x)

    该方法针对idea版本(2020.2.x) C:\Users\yanghao\AppData\Roaming\JetBrains\IntelliJIdea2020.2\options\project.default.xml <component name="MavenImportPreferences"> <option name="generalSettings"> <MavenGeneralSettings> <opti

  • sqlserver 2008手工修改表结构,表不能保存的问题与解决方法

    如果点击"保存文本文件"将会弹出保存文本文件的对话框口, 保存的文本文件中的内容是如下: /*    2010年4月5日0:34:53    用户:    服务器: LONGGEL    数据库: longgel    应用程序: */ ChildCaiClass 保存的对于我来说简直是没用的信息,只是记录了事务的发生时间和一些相关信息,结果这样操作了数据库的结构还是没能修改并保存,而是继续弹出上面的那个窗口,这下我就郁闷了. 点击"取消"却弹出 同样也是没有完成表

  • 计算机名称修改后Oracle不能正常启动问题分析及解决

    前一阵子,在下给老妹装好oracle后,发现老妹的计算机名称好长,不容易记,于是一时手痒,将其计算机名称更改了一下,没想到就这一步操作,可苦坏了俺老人家了,一场悲剧即将开始! 当更改计算机名称,重启电脑后,发现oracle不能启动了.当时俺就想呀,差哪呀,安装完成后,oracle还是可以启动的呢,怎么现在就不行了呢.经过俺老人家仔细的回忆,才发现罪魁祸首就是俺随手更改的计算机名称.因为oracle启动的监听,代理等都是与计算机名称绑定在一起的. 俺马上使出俺唯一的杀手戬--google,经过网上

随机推荐