场景说明
在JavaWeb系统中,开发者查询某表的行数据时,会根据其业务逻辑需要和提高SQL查询效率,不会全部字段数据都查询出来,而是有选择的只查询某些字段数据。本人最近常用的持久层框架是Mybaits,在使用过程中发现一个问题:数据库存在数据记录时,而我们查询的某几个字段为NULL时,其中定义的Mapper方法接收是一个对象的话,其对象不会实例化,是NULL值。 即是,当查询的字段有值时,Mybatis才会实例化对象,并进行set值,但如果查询字段皆为NULL值,那么接收的对象将不会实例化,在后续的调用中会抛出NullPointerException。
场景代码
-
定义的Mapper查询方法


-
数据库实际存储的数据

-
代码查询实际情况

-
SQL查询实际情况

-
当我们给数据记录的其中一列赋值后


两个建议
- 在调用其定义的Mapper方法时,对于查询结果进行一个判空处理。
- 在其定义的查询语句,带上数据记录的主键列,这样才查询数据,其他数据列为NULL值,也能得到一个对象实例。如下图所示:


在JavaWeb开发中,使用Mybatis查询特定字段时,如果查询结果全为NULL,对象不会实例化,可能导致NullPointerException。解决方案包括在调用时进行判空处理和在查询语句中包含主键列,即使其他字段为NULL,仍能获取对象实例。这样做可以提高代码健壮性和查询效率。

被折叠的 条评论
为什么被折叠?



