商城首页欢迎来到中国正版软件门户

您的位置:首页 >Mybatisplus查询返回null但条数正确是什么原因?

Mybatisplus查询返回null但条数正确是什么原因?

  发布于2026-07-30 阅读(0)

扫一扫,手机访问

1、问题描述

在实际开发中,有时会遇到一个奇怪的现象:用 MybatisPlus 查询数据,返回的列表条数是对的,但每个元素都是 null,程序也不报错。先看一段出问题的代码:

Mybatisplus查询返回null但条数正确是什么原因?

1、自定义的 StudentMapper 继承了 BaseMapper 接口:

public interface StudentMapper extends BaseMapper {
}

2、调用 selectList 方法查询数据时,打印结果全都是 null,但条数是对的——比如查出来 5 条,就打印 5 个 null。

代码如下:

@RequestMapping("/testmybatisplus")
    @ResponseBody
    public void testmybatisplus() {
        System.out.println("===1===");
        List list=studentMapper.selectList(null);
        //Assert.isTrue(5 == list.size(), "");
        list.forEach(System.out::println);
    }

2、出现问题的原因

根本原因在于命名规范不匹配。看看数据库建表语句:

CREATE TABLE student(
   stu_id VARCHAR(50),
   stu_name VARCHAR(30),
   stu_sex VARCHAR(2),
   stu_age VARCHAR(4),
   stu_addr VARCHAR(50),
   stu_pwd VARCHAR(50)
)DEFAULT CHARSET=utf8;

MybatisPlus 默认开启了驼峰命名映射,也就是说它会自动将数据库字段 stu_id 映射为 stuIdstu_name 映射为 stuName,以此类推。而对应的 Java Bean 字段却是这样的:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private String stu_id;
    private String stu_name;
    private String stu_sex;
    private String stu_age;
    private String stu_addr;
    private String stu_pwd;

}

看到了吗?数据库字段是下划线风格,Java 字段也是下划线风格,但 MybatisPlus 默认的驼峰映射却把数据库字段当成驼峰来处理,导致字段名对不上:数据库字段被映射成了 stuId,而 Bean 里是 stu_id,映射自然失败,结果就是每个对象都是 null,但数量统计是正常的。

3、解决方法

3.1、解决办法 1

统一使用驼峰命名法。数据库字段写成 stu_id 没问题,但 Java 字段改成 stuId,加上 @TableId@TableField 注解,或者直接让数据库字段也采用驼峰风格(比如 stuId),这样就能完美匹配。

3.2、解决办法 2

低级错误偶尔也会犯:检查是否遗漏了 setter/getter 方法或者构造器。如果 Bean 没有正确的 setter,MybatisPlus 反射拿不到赋值入口,结果同样会是 null。使用时注意 Lombok 注解是否生效,或者手动补全方法。

3.3、解决办法 3

关闭 MybatisPlus 默认的驼峰命名映射。在配置文件中做如下设置:

  • org.apache.ibatis.logging.stdout.StdOutImpl:用于打印 MybatisPlus 执行的 SQL 语句,方便调试。
  • map-underscore-to-camel-case: false:关闭驼峰命名法,让字段名保持原样映射。
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: false

需要注意的是,如果 Mapper XML 文件放在 src/main/java 目录下,路径要写成 classpath:/com/*/*/mapper/*Mapper.xml;如果放在 resource 目录,则写成 classpath:/mapper/**.xml

总结

MybatisPlus 查询返回 null 但条数正确,十有八九是字段映射出了问题。无论是驼峰命名冲突、缺少 setter,还是配置未关闭驼峰映射,都可以根据上述方法逐一排查。希望这份经验能帮你快速定位问题。

本文转载于:https://www.jb51.net/program/368353wr8.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注