mybatis 传入null值的解决方案

目录
  • mybatis传入null值解决
    • dao层
    • xml文件内容
  • mybatis注入老是为null
    • 终于过了一会儿,看代码时突然顿悟

mybatis 传入null值解决

前端传入两个值,如果其中一个为null时,很多时候我们都很困惑,明明传入的是null,为啥mybatis 的xml文件中的if条件判断无效?

public String getPersonInfo(@PathParam("Name") String Name, @PathParam("IDCard") String IDCard)

dao层

public List<Map> getPersonInfo(@Param("name") String name, @Param("idcard") String idcard);

xml文件内容

<if test="name == null or name == '0'.toString()"> 
    <![CDATA[ and (b.identity_id = #{idcard,javaType=String,jdbcType=VARCHAR})
    group by name,id_card,birthTime,sex  ]]> 
</if>

每次执行都是失败的,网上很多都说要在dao层添加@param注解和xml文件内容中要加入jdbcType类型就能解决,最后还是没解决

其实还有一个点忽略了,就是传入时的null值其实是个字符串null,根本就不是null,它是个字符串null

        if (Name == null || "null".equalsIgnoreCase(Name)) {
            Name = null;
        }
        if (IDCard == null || "null".equalsIgnoreCase(IDCard)) {
            IDCard = null;
        }

问题解决!

mybatis 注入老是为null

今天遇到个很弱智的问题,以此记录!时刻提醒自己

    public int delExhibion(List<String> ids){
        Integer result = null;
        ExhibitionManager exhibitionManager = new ExhibitionManager();
        for (String id : ids){
            exhibitionManager.setId(id);
            exhibitionManager.setDelFlag("1");
             result += exhibitionManagerMapper.delete(id);
        }
        return result;
    }

发现老是执行 delete 的时候 ,老是报 空指针异常

然后尝试使用:  @Param  给参数加上命令  

int delete(@Param("id") String id);  

结果还是不行,

然后在尝试使用:对象传参,这样总该注入进去了吧 

int delete(Object dx);

结果还是不行,

然后在尝试使用:Mybatis 单个参数动态语句引用:

是当我们的参数为String时,在sql语句中#{id} 会去我们传进来的参数调getId()方法获取参数,很明显,String没有对应的方法,所以报错了,那我们这里要如何引用id呢,需要采用下面的写法:

<delete id="delete" parameterType="java.lang.String" >  
         SELECT * FROM table
         <where>  
                   <if test="_parameter != null">  
                            AND id= #{id}  
                   </if>  
         </where>  
</select>

单Mybatis传参为单个参数时,在sql语句中需要使用  _parameter 来引用这个参数

结果还是不行。

终于过了一会儿,看代码时突然顿悟

    public int delExhibion(List<String> ids){
        Integer result = null;
        for (String id : ids){
             result += exhibitionManagerMapper.delete(id);
        }
        return result;
    }

Integer  result  我给他设置默认值  为null,   并且还让  reuslt  这个对象   result +=

加等于在执行数据库操作返回结果时 用 result 去接收。 这不就一定是空指针了吗。

我给 Integer result = 0;  设置个默认值为0   那也不会出现这种情况!

或者 result =   给result  初始化赋值     也不会报  空指针异常!  不过这样做在我的业务中是不对的哦。  只是不会报错. 但是获取不到我想要的执行成功条数

Integer result = null;
result =  exhibitionManagerMapper.delete(id);

真的是被自己气到了。以此记录!时刻提醒自己   

 public int delExhibion(List<String> ids){
        Integer result = 0;
        for (String id : ids){
             result += exhibitionManagerMapper.delete(id);
        }
        return result;
    }

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

(0)

相关推荐

  • mybatis注入Date日期值为null的解决方法

    在今天的一次代码编写中,突然遇到了一个奇怪的问题,在使用mybatis进行Date类型插入时,可以很顺利的就插入进数据库中了,可是当我想从mysql中取出Date类型的值注入java中的Date类型时,发现传递过来的值是空的,但是不管是映射还是命名规范都是正确的,就非常的奇怪. 数据库设计: 映射类的设计: @Data public class BorrowTime { //借书时间 private Date borrowTime; //过期时间 private Date expiredTime

  • 解决mybatisPlus null 值更新的问题

    发现mybatisPlus会更新对象属性为null的值, 与field-strategy配置有关 mybatis-plus: global-config: db-config: field-strategy: not_null 在3.1.0版本中,其选择的值有 public enum FieldStrategy { IGNORED, NOT_NULL, NOT_EMPTY, DEFAULT; private FieldStrategy() { } } 我刚开始选择的是ignored,所以null

  • mybatis plus更新字段为null处理方法

    目录 测试代码如下 数据库表 实体类 mapper controller 运行测试 运行测试 mybatis plus 将字段更新为 null,默认如果不做任何处理,使用 mybatis plus 自带的更新方法是不能将字段更新为 null 的,如果要将字段更新为 null,需要做下面的处理 在需要的字段上加 @TableField 注解,并设置属性 updateStrategy = FieldStrategy.IGNORED 测试代码如下 数据库表 实体类 package com.sbmp.b

  • 解决mybatis plus字段为null或空字符串无法保存到数据库的问题

    背景 项目中集成了mybatis plus, 今天在做后台的一个常规的增删改查时,发现字段值为null时,这个字段不会被保存到数据库 解决办法 在字段上加上 @TableField(strategy = FieldStrategy.IGNORED) strategy字段更新插入策略属性说明: IGNORED(0): "忽略判断", 所有字段都更新和插入 NOT_NULL(1): "非 NULL 判断", 只更新和插入非NULL值 NOT_EMPTY(2): &quo

  • mybatis 传入null值的解决方案

    目录 mybatis传入null值解决 dao层 xml文件内容 mybatis注入老是为null 终于过了一会儿,看代码时突然顿悟 mybatis 传入null值解决 前端传入两个值,如果其中一个为null时,很多时候我们都很困惑,明明传入的是null,为啥mybatis 的xml文件中的if条件判断无效? public String getPersonInfo(@PathParam("Name") String Name, @PathParam("IDCard"

  • mybatis 传入null值的解决方案

    目录 mybatis传入null值解决 dao层 xml文件内容 mybatis注入老是为null 终于过了一会儿,看代码时突然顿悟 mybatis 传入null值解决 前端传入两个值,如果其中一个为null时,很多时候我们都很困惑,明明传入的是null,为啥mybatis 的xml文件中的if条件判断无效? public String getPersonInfo(@PathParam("Name") String Name, @PathParam("IDCard"

  • 解决mybatis返回boolean值时数据库返回null的问题

    常规情况,我们使用数据库判断 true or false.所写的语句是select count(id) from 表名: 这种常用情况下,只有当查询语句查到数据 且 只有一条时才会返回 true; 还有一种情况,就是数据库中返回判断句,比如 返回的对错将以1或0表示: 但是当返回值为null,或者多个值的时候 会怎么样呢,0 1 还是报错? 测试表示这种情况下会报错: 希望大家使用 boolean 返回时 也能格外小心. 这里简单做了更改方法,可能不是最优化的,有更好的意见还请不吝赐教. 补充知

  • MyBatis传入集合 list 数组 map参数的写法

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有item,index,collection,open,separator,close.item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性

  • C#中SQL参数传入空值报错解决方案

    C#中的null与SQL中的NULL是不一样的,SQL中的NULL用C#表示出来就是DBNull.Value. 注意:SQL参数是不能接受C#的null值的,传入null就会报错. 下面我们看个例子: SqlCommand cmd=new SqlCommand("Insert into Student values(@StuName,@StuAge)" ,conn); cmd.parameters.add("@StuName" ,stuName); cmd.para

  • SpringBoot项目如何把接口参数中的空白值替换为null值(推荐)

    问题发生 我们公司代码生成的时候,查询列表统一都是使用了setEntity() ,查询写法如下: public List<BasReservoirArea> selectList(BasReservoirArea basReservoirArea) { QueryWrapper<BasReservoirArea> where = new QueryWrapper<>(); where.setEntity(basReservoirArea); return baseMap

  • Mybatis-plus自动填充不生效或自动填充数据为null原因及解决方案

    目录 问题一:自动填充的数据为null 问题二:使用mybatis-plus的乐观锁后发现自动填充的updateTime字段不自动填充了 小结 昨天使用mybatis-plus.使用自动填充后发现了两个问题. 一个是填充数据为null, 一个是当使用了mybatis-plus的乐观锁,自动填充就失效了 开始在网上看,有人说是mybatis的bug,我想不会我这么快就遇到了bug.后面我通过idea的(ctrl+B)看他的源码.发现这不是bug,而是一个非常巧妙的设计,当然也可能是之前有bug,我

  • MyBatis传入参数的实例代码

    在MyBatis的select.insert.update.delete这些元素中都提到了parameterType这个属性.MyBatis现在可以使用的parameterType有基本数据类型和JAVA复杂数据类型 基本数据类型:包含int,String,Date等.基本数据类型作为传参,只能传入一个.通过#{参数名} 即可获取传入的值 复杂数据类型:包含JAVA实体类.Map.通过#{属性名}或#{map的KeyName}即可获取传入的值 基本数据类型参数示例: 根据班级ID查询教师列表 x

  • Mysql实现null值排在最前/最后的方法示例

    前言 我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作. 为了处理这种情况,MySQL提供了三大运算符: IS NULL: 当列的值是 NULL,此运算符返回 true. IS NOT NULL: 当列的值不为 NULL, 运算符返回 true. <=>: 比较操作符(不同于=运算符),当比较的的两个值为 NULL 时返回 true. 关于 NULL 的条件比较运算是比较特殊的

  • MyBatis传入数组集合类并使用foreach遍历

    这篇文章主要介绍了MyBatis传入数组集合类并使用foreach遍历,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在mapper中传入数组或集合类,使用foreach标签遍历出其中的值与SQL语句拼接 JAVA dao层接口 public interface UserDao { public List<User> getUsersByCollection(Collection collection); } mapper文件 <sel

随机推荐