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

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

场景说明

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

场景代码

  1. 定义的Mapper查询方法
    在这里插入图片描述
    在这里插入图片描述

  2. 数据库实际存储的数据
    在这里插入图片描述

  3. 代码查询实际情况
    在这里插入图片描述

  4. SQL查询实际情况
    在这里插入图片描述

  5. 当我们给数据记录的其中一列赋值后
    在这里插入图片描述
    在这里插入图片描述

两个建议

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值