java.lang.NullPointerException在Mybits下的异常

    前几天在用SSM框架做开发时报空指针异常,潜意识得就去寻找那个数据没有传进来,可是检查了好久都发现每个数据都传进来了,最后仔细看报错文件发现是Mybits的xml出错,再往下翻发现是POJI中的错误。

   类似于

java.lang.NullPointerException在Mybits下的异常_第1张图片

pass这个属性我定义地是Integer,但是下面set和get中却是int

报错如下:

java.lang.NullPointerException在Mybits下的异常_第2张图片

我当时想都没想就把get和set方法改为Integer,结果问题就解决了,但是为什么改为Integer就行了?

这个问题有两种解决方法:

1 定义pass时用int定义就行,这样无论你get和set是Integer还是int都不会报错;

原因在于int是有默认值的,默认为0;而Integer这种包装类是没有初始值的;

这样哪怕你的get和set是Integer,会自动发生装箱操作,所以不会报错;

2如果pass定义为Integer了,那它的get和set就必须也是Integer;

为什么呢,这个问题我理了一遍才清楚:

如果pass定义为Integer,因为没有默认值,所以为null,当下面用到get和set如果get和set是int的,就得自动发生拆箱操作,但是并不存在这个值让你去拆箱;所以会报错;

而无论你是否会使用get,在Mybits的xml中只要你的动态SQL中有if,如下:

java.lang.NullPointerException在Mybits下的异常_第3张图片

注:上图是我找错误时,不改POJO,只注释掉pass的动态SQL也就不报错了;

Mybits就会自动调用这个属性的get,所以发生了报错。


你可能感兴趣的:(java.lang.NullPointerException在Mybits下的异常)