MyBatis数据库操作空指针异常
May 10, 2017
有时候,你认为出问题的地方并不是你想的地方。
明明数据库都设置了id自增,xml也做了相关的配置
1 | useGeneratedKeys="true" keyProperty="id" |
但数据insert依然报空指针异常,控制台很明显可以看出id为null导致的异常,于是静下心来想想,结果发现插入的这个mapper被我放在一个工具类里了,方法设为了静态,所以变量mapper也被设置为static,编译时没有任何问题,但是一跑起来就一直是空指针异常,其实跟MyBatis没啥关系,是因为spring没法注入静态变量,类被加载字节码的时候变量已经初始化了,也就是给该变量分配内存了,导致spring忽略静态变量。所以上面的写法自然就错了。
Spring 依赖注入是依赖set方法,静态变量不属于对象,只属于类。解决方法就是加上非静态的set方法,如下:
1 | private AccountMapper accountMapper; |
或者在spring的配置文件中配置(说白了也是set方法,都一样)
1 | <bean value="test" class="x.x.x.Util"> |