使用spring boot集成mybatis-plus, 查询结果字段为空, 不显示

问题 :使用spring boot集成mybatis-plus, 查询结果字段为空, 不显示

已配置yml文件, sqlSessionFactory的Configuration

img

img

img

img

配置该配置的已经配置完了, 是有版本问题吗, 还是需要其他配置

问题场景描述:
实体类:

img


数据库:

img

数据库版本5.7.29,返回数据有10条, 数据库中也是10条, 但在postman中查对应字段只有9个, 因为返回字段的值中7个值为“下架”, 2个值为空字符, 1个为null, 为null的字段在返回数据中未将字段显示

img

img

img

没懂你描述的意思?
你是指SQL查出来的为空的数据没有通过接口返回到前端吗?
如果是的话在响应里面配置下:
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,SerializerFeature.WriteMapNullValue);//主要看这行代码

查询业务结果字段为空?
为空的数据截图看下,是所有都为空,还是部分为空。

加个配置就可以了

这是我的配置

img

如果yml中配置不起作用的话,在sqlSessionFactory配置下就可以了

具体的为空指的是什么?

你的意思就是unshelveReason为NULL也需要查询出来吗?
你加上个 或 条件试试?

// 添加查询条件,字段为NULL
queryWrapper.isNull("column_name");

建议把表的创建语句和数据库版本类型描述清楚,有可能是为null本来查询出来就是一条数据

默认情况下,MyBatis-Plus 在生成 SQL 执行查询语句时会排除字段值为空的字段名,不将其包含在查询结果中。
在最新的 MyBatis-Plus 版本中,配置方式可能有所改变。你可以参考以下步骤来配置 MyBatis-Plus 处理空字段的方式:
创建一个配置类,例如 MyBatisPlusConfig,并添加 @Configuration 注解使其成为一个配置类。
在该配置类中,定义一个名为 mybatisConfigurationCustomizer 的 Bean 方法,返回值类型为 org.apache.ibatis.session.ConfigurationCustomizer。
在该 Bean 方法中,使用 Lambda 表达式定制 MyBatis 的配置,设置 setCallSettersOnNulls(true) 来处理空字段。示例代码如下:

@Configuration
public class MyBatisPlusConfig {
    @Bean
    public ConfigurationCustomizer mybatisConfigurationCustomizer() {
        return configuration -> configuration.setCallSettersOnNulls(true);
    }
}

然后,将该配置类注入到 Spring 容器中,以使配置生效。
这样配置后,MyBatis-Plus 将在生成 SQL 执行查询语句时包含空字段。确保你的项目中已经引入了兼容的 MyBatis-Plus 版本和相应的依赖库。

你把查询语句的那段代码贴出来吧,不然不好分析

这样试试

项目yml 配置文件增加

mybatis-plus:
  configuration:
    call-setters-on-nulls: true 

看起来是是由于MyBatis-Plus的配置或者映射关系引起的。一些可能的原因和解决方法:
可以在查询条件中指定该字段的值为NULL或空字符串,或者在实体类中添加对应的字段,以便在查询结果中返回。
以检查Mapper XML文件中的查询语句,确保包含了所有需要查询的字段。
在实体类中,如果某个字段的注解配置不正确,或者与数据库中的字段名不匹配,可能会导致查询结果中没有该字段。
在MyBatis-Plus的配置中,如果设置了mapUnderscoreToCamelCase属性为true,可能会导致查询结果中的字段名与实体类中的字段名不匹配。

回答部分参考、引用ChatGpt以便为您提供更准确的答案:

根据您的描述,您在使用Spring Boot集成MyBatis-Plus时遇到了查询结果字段为空而不显示的问题。您已经进行了配置,并且数据库中有10条数据,但在Postman中只显示了9个字段的值,其中有7个值为"下架",2个值为空字符,1个为null的字段在返回数据中未显示。

可能导致这种情况的原因有以下几点:

  1. 实体类定义问题:请确保您的实体类与数据库表的字段一一对应,并且字段类型和名称都正确。如果实体类定义不正确,可能会导致某些字段的值无法正确映射。
  2. 数据库数据问题:请检查数据库中该条记录对应的字段是否确实为空或为null。确保数据库中的数据与预期一致。
  3. 序列化问题:如果您使用了对象序列化器(如Jackson)将查询结果序列化为JSON格式返回给前端,可能会受到序列化配置的影响。请确保序列化器配置正确,没有忽略空值字段的设置。
  4. MyBatis-Plus配置问题:请检查您的MyBatis-Plus的配置,特别是查询的SQL语句是否正确,并确保开启了映射结果自动映射的功能。另外,如果您使用了自定义的ResultMap或Wrapper查询条件,也需要确认是否正确设置了需要返回的字段。
  5. 数据库驱动版本问题:某些数据库驱动程序在某些版本中可能存在问题,导致查询结果字段为空的情况。您可以尝试更新数据库驱动程序的版本或切换到其他可靠的版本进行测试。

综上所述,您可以逐步检查和调试以上可能的原因,以确定导致查询结果字段为空而不显示的具体原因,并进行相应的修复。