# mybatis-plus 查询,值为 null,字段不显示问题

场景:

编写了一个 sql 返回 List<Map<String, Object>> 类型数据,而数据库中某些字段有 id 的值而没有 name 的值,此时 name 为 null 的应该查询出来是:{id:10,name:null} 但是结果却是:{id:10} 后面的 name 就没有了,这篇文章就是解决这个问题的

解决方案:

需要修改 mybatis-plus 的配置即可。将 mybatis-plus 的 call-setters-on-nulls 设置为 true 即可

mybatis-plus:
  # 默认,每次执行 sql 都会开关 statement
  executor-type: simple
  configuration:
    # 解决字段为 null 查询不显示问题
    call-setters-on-nulls: true

# 代码案例

数据库表数据:

image-20240707104120197

dao

@Mapper
public interface ClassDao extends BaseMapper<ClassEntity> {
    @Select({
            "SELECT",
            "*",
            "FROM tab_class"
    })
    List<Map<String, Object>> getInfo();
}

serviceImpl

@Service("classService")
public class ClassServiceImpl extends ServiceImpl<ClassDao, ClassEntity> implements ClassService {
    @Resource
    private ClassDao classDao;
    @Override
    public List<Map<String, Object>> getInfo()
    {
        return classDao.getInfo();
    }
}

controller

@RestController
@RequestMapping("/mpj/class")
public class ClassController {
    @Autowired
    private ClassService classService;
    @GetMapping("/getInfo")
    public List<Map<String, Object>> getInfo()
    {
        return classService.getInfo();
    }
}

# 在不使用配置 call-setters-on-nulls: true 的情况下的数据如下:

image-20240707104326694

image-20240707104240316

这并不是我们想要的

# 使用配置 call-setters-on-nulls: true 的情况下的数据如下:

image-20240707104340953

image-20240707104425041