场景说明
在JavaWeb系统中,开发者查询某表的行数据时,会根据其业务逻辑需要和提高SQL查询效率,不会全部字段数据都查询出来,而是有选择的只查询某些字段数据。本人最近常用的持久层框架是Mybaits,在使用过程中发现一个问题:数据库存在数据记录时,而我们查询的某几个字段为NULL时,其中定义的Mapper方法接收是一个对象的话,其对象不会实例化,是NULL值。 即是,当查询的字段有值时,Mybatis才会实例化对象,并进行set值,但如果查询字段皆为NULL值,那么接收的对象将不会实例化,在后续的调用中会抛出NullPointerException。
场景代码
-
定义的Mapper查询方法
-
数据库实际存储的数据
-
代码查询实际情况
-
SQL查询实际情况
-
当我们给数据记录的其中一列赋值后
两个建议
- 在调用其定义的Mapper方法时,对于查询结果进行一个判空处理。
- 在其定义的查询语句,带上数据记录的主键列,这样才查询数据,其他数据列为NULL值,也能得到一个对象实例。如下图所示: