mybatis 传入null值的解决方案
作者:A雄 发布时间:2023-11-23 06:54:44
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;
}
来源:https://blog.csdn.net/u013343616/article/details/78124908
猜你喜欢
- 1、何为依赖冲突Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的。Maven的依赖机制会导致Jar包的冲突。举个例子,现在你的
- 前言今天的文章从下面这张图片开始,这张图片Java开发们应该很熟悉了我们都知道无锁状态是对象头是有位置存储hashcode的,而变为偏向锁状
- SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-
- 本文实例为大家分享了flutter实现底部导航栏的具体代码,供大家参考,具体内容如下一.flutter底部导航栏常用组件BottomNavi
- 本文实例为大家分享了Java实现考试系统的具体代码,供大家参考,具体内容如下说明这里的考试系统是指由学生,老师以及考试机构成的,学生通过用户
- 一、简介(1)、MySQL是一个关系型数据库系统,是如今互联网公司最常用的数据库和最广泛的数据库。为服务端数据库,能承受高并发的访问量。(2
- 消息都是存放在一个消息队列中去,而消息循环线程就是围绕这个消息队列进入一个无限循环的,直到线程退出。如果队列中有消息,消息循环线程就会把它取
- 很多学习Android程序设计的人都会发现每个人对代码的写法都有不同的偏好,比较明显的就是对控件响应事件的写法的不同。因此本文就把这些写法总
- Java 使用IO流实现大文件的分割与合并文件分割应该算一个比较实用的功能,举例子说明吧比如说:你有一个3G的文件要从一台电脑Copy到另一
- 正在尝试分配更低的访问权限?在进行Java编程时会给我们报出如下提示怎么办?这里我们将给大家介绍详细的解决方法。首先,查看,控制台给出的提示
- 1.最常用的方法是创建一个计数器,判断是否遇到‘\0',不是'\0'指针就往后加一。int my_strlen(co
- 简介我们在使用flutter的过程中,有时候需要控制某些组件是否展示,一种方法是将这个组件从render tree中删除,这样这个组件就相当
- 1.打开官网稍微学习一下,了解一下spring cloud是个什么东西,大概有哪些组件等https://spring.io/projects
- 实现方案:我们直接参考实例代码:private String pattern = "((http|ftp
- 这篇文章主要介绍了JAVA如何定义构造函数过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 本文介绍IntelliJ IDEA中Project 窗口的一些设置技巧,参考IntelliJ IDEA 简体中文专题教程,英文好的同学可以查
- 最近做的项目,需要将一些信息导出到word中。在网上找了好多解决方案,现在将这几天的总结分享一下。目前来看,java导出word大致有6种解
- 本文实例为大家分享了Android实现登录注册功能的具体代码,供大家参考,具体内容如下运行环境 Android Studio总体效果图一、
- 前言本文主要给大家介绍了关于Java读取二进制文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。读Hex写CS
- 在开发Android应用程序中,经常会自定义View来实现各种各样炫酷的效果,在实现这吊炸天效果的同时,我们往往会定义很多attr属性,这样