关于数据库存在数据记录,而Mybatis查询对象为NULL的问题记录

场景说明

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

场景代码

  1. 定义的Mapper查询方法
    关于数据库存在数据记录,而Mybatis查询对象为NULL的问题记录_第1张图片
    在这里插入图片描述

  2. 数据库实际存储的数据
    关于数据库存在数据记录,而Mybatis查询对象为NULL的问题记录_第2张图片

  3. 代码查询实际情况
    关于数据库存在数据记录,而Mybatis查询对象为NULL的问题记录_第3张图片

  4. SQL查询实际情况
    关于数据库存在数据记录,而Mybatis查询对象为NULL的问题记录_第4张图片

  5. 当我们给数据记录的其中一列赋值后
    关于数据库存在数据记录,而Mybatis查询对象为NULL的问题记录_第5张图片
    关于数据库存在数据记录,而Mybatis查询对象为NULL的问题记录_第6张图片

两个建议

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

你可能感兴趣的:(开发笔记,Java,java,Mybatis)