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


猜你喜欢
- 一、简介Mybatis-Plus(简称MP)是一个 Mybatis 的一个增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发
- 本文实例讲述了Android控件之GridView用法。分享给大家供大家参考。具体如下:GridView是一项显示二维的viewgroup,
- 本文实例讲述了C++实现的链表类。分享给大家供大家参考。具体如下:#include <iostream>using namesp
- 删除以逗号隔开的字符串中某一个值例如要删除 “1,2,3,4” 中的 2,返回 &ldquo
- 本文介绍了SpringCloud +Zookeeper完成配置中心,分享给大家,具有如下:使用场景项目配置更改不需要打包,重启提供配置文件的
- 一、可空类型修饰符(?)C#2.0里面实现了Nullable数据类型//A.比如下面一句,直接定义int为null是错误的,错误提示为无法将
- 本文实例中的自定义类PictureBox继承于UserControl,最终实现简单的分屏功能。分享给大家供大家参考之用。具体实现代码如下:p
- 前言convert 叫强制转换,可以是其他类型。最近在工作中遇到一个问题,需要将字符串形式的数值转换回数值,很正常的要求吧。却遇到了问题,下
- 在C#里关于定时器类就有3个 1.定义在System.Windows.Forms里 2.定义在System.Thre
- SpringAOP 通过JoinPoint获取参数名和值在Java8之前,代码编译为class文件后,方法参数的类型固定,但是方法名称会丢失
- Math.PI 记录的圆周率Math.E 记录e的常量Math中还有一些类似的常量,都是一些工程数学常用量。Math.ab
- 目录前言一、Android应用DAC沙盒二、Android应用权限三、应用信息的存储四、应用权限的映射五、应用的SELinux标签六、And
- Cardview配合ImageView显示圆形图效果图:刚在看自定义View的知识点时,突然想起来,如果CardView宽高相等,CardV
- // 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1。package demo;publ
- 本文实例分析了C#中float的取值范围和精度。分享给大家供大家参考。具体分析如下:float类型的表现形式:默认情况下,赋值运算符右侧的实
- 本文实例讲述了Java创建ZIP压缩文件的方法。分享给大家供大家参考。具体如下:这里注意:建议使用org.apache.tools.zip.
- 最近的项目中,想做到一种能够吸引眼球的一种角色选择浏览效果Demo源码:点击打开链接最终实现了下按如下图这么一种浏览效果:效果图一效果图二可
- tasks下面的代码展示了三个Gradle task,稍后会讲解这三者的不同。 task myTask { println "He
- Dialog和Toast所有人肯定都不会陌生的,这个我们平时用的实在是太多了。而Snackbar是Design Support库中提供的新控
- 前言 GMap.NET是一个强大、免费、跨平台、开源的.NET控件。分为WPF和winform版。GMap.NET的基本知识不做过