当前位置: 首页
编程语言
Mybatisplus查询返回null但条数正确的原因分析

Mybatisplus查询返回null但条数正确的原因分析

时间:2026-07-30
转载

MybatisPlus查询返回null但条数正确,通常因字段映射问题。默认驼峰映射将数据库下划线字段转为驼峰,而JavaBean仍用下划线,导致映射失败。解决方法包括统一驼峰命名、检查Setter方法或关闭驼峰映射配置。

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 映射为 stuId,stu_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,还是配置未关闭驼峰映射,都可以根据上述方法逐一排查。希望这份经验能帮你快速定位问题。

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
Zustand 状态管理:从跨组件共享到性能优化的实战指南

Zustand 状态管理:从跨组件共享到性能优化的实战指南

本文深入解析 Zustand 在 React 应用中的核心机制,重点阐述如何通过发布订阅模式解决 Props Drilling 问题。通过具体代码演示 Store 的创建与跨组件读写,验证响应式更新流程。文章详细讲解选择器机制对渲染性能的影响,并剖析状态拆分、异步处理及适用边界等常见陷阱,提供一套兼

时间:2026-10-09 18:15
Python 单元测试隔离术:掌握 patch 替换与 Mock 行为控制

Python 单元测试隔离术:掌握 patch 替换与 Mock 行为控制

在 Python 测试中,隔离外部依赖是保证用例稳定性的关键。本文从 `unittest mock` 的核心机制出发,解析 `patch` 如何精准替换查找路径上的对象,以及 Mock 如何模拟函数、类与属性行为。通过具体代码示例,展示如何控制返回值、异常抛出及调用验证,并重点剖析路径错误、装饰器顺

时间:2026-10-09 18:10
Python静态检查:mypy类型检查配置

Python静态检查:mypy类型检查配置

介绍mypy的静态类型检查机制,以及如何在Python项目中完成安装、配置、执行检查并逐步收紧类型约束,帮助开发者尽早发现类型错误并避免常见配置陷阱。

时间:2026-10-09 18:05
PHP 接口:从契约约束到依赖注入的实战指南

PHP 接口:从契约约束到依赖注入的实战指南

本文从 PHP 接口的契约本质出发,探讨如何利用类型提示(Type Hinting)强化行为约束,并通过依赖注入实现模块间的低耦合。文章结合具体代码示例,解析接口在提升代码可替换性与可维护性方面的核心价值,同时指出常见的设计陷阱与应对策略,帮助开发者建立清晰的抽象思维。

时间:2026-10-09 18:00
Python迭代器:iter与next协议实现

Python迭代器:iter与next协议实现

从迭代器协议入手,理解iter()与next()的协作机制,并通过自定义迭代器掌握协议实现、StopIteration终止、实际验证以及常见避坑。

时间:2026-10-09 17:55
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全