MyBatis-Plus selectByMap查询与selectMaps空值处理

Mia
Mia
发布时间:2026-10-15| 6人浏览过
原创

在使用MyBatis-Plus进行数据库操作时,开发者常遇到两种典型场景:一是需要通过动态字段组合进行精确查询,二是使用selectMaps方法时结果集忽略NULL值导致前端展示缺失。本文将分别介绍selectByMap的参数构建技巧,并提供修复selectMaps空字段显示的YAML配置方案。

selectByMap条件查询用法

MyBatis-Plus提供的BaseMapper接口中包含selectByMap方法,其核心作用是根据传入的Map对象自动生成WHERE子句,将Map中的键值对作为SQL中的等值查询条件。该方法签名如下:

List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);

由于参数类型为Map<String, Object>,调用时需要预先实例化HashMap,并将需要匹配的条件填入其中。假设我们需要根据“列名1”和“列名2”的值进行筛选,代码逻辑如下:

Map<String, Object> map = new HashMap<>();
map.put("列名1", 约束1); // 条件1
map.put("列名2", 约束2); // 条件2
xxxMapper.selectByMap(map);

上述代码在底层执行时,会自动拼接出类似以下的SQL语句:

SELECT * FROM 表名 WHERE 列名1 = ? AND 列名2 = ?

这种方式相比原生XML编写或复杂的QueryWrapper链式调用,在处理静态且简单的多条件等值查询时更为简洁直观。

selectMaps返回值字段为空不显示问题

在实际业务中,selectMaps方法常用于直接获取Map集合类型的结果,优势在于可以灵活定义返回的字段结构。然而,当数据库表中某些字段允许为NULL时,默认的MyBatis映射行为会忽略这些空值,导致返回的JSON数据中缺少对应键。以下是通过配置文件调整该行为的详细步骤。

第1步:观察未开启空值处理的默认表现

首先查看基础的MyBatis-Plus配置(位于application.yaml),此时并未包含专门处理Null值的设置项:

mybatis-plus:
  mapper-locations: classpath*:/mapper/**Mapper.xml
  typeAliasesPackage: com.vkl.booking.persistence.entity
  configuration.cache-enabled: false
  global-config.db-config.db-type: mysql
  configuration.jdbc-type-for-null: null

在此基础上,通过Mapper调用selectMaps方法并添加自定义字段进行测试:

public Message test(){
    List<Map<String, Object>> mapList = cLibraryMapper.selectMaps(new LambdaQueryWrapper<CompanyBookingLibrary>());
    for(Map<String,Object> map :mapList){
        /*自定义添加自己想要的字段*/
        map.put("test","1");
    }
    return Message.object(mapList);
}

请求接口后的返回结果中,原本在数据库中为空的字段将完全不存在于输出的JSON结构中:

第2步:添加call-setters-on-nulls配置

为了让MyBatis在映射数据时将数据库的NULL值映射为Java对象的null(从而保留字段键名),需要在configuration节点下启用call-setters-on-nulls属性。修改后的application.yaml配置如下:

mybatis-plus:
  mapper-locations: classpath*:/mapper/**Mapper.xml
  typeAliasesPackage: com.vkl.booking.persistence.entity
  configuration.cache-enabled: false
  global-config.db-config.db-type: mysql
  configuration.jdbc-type-for-null: null
  configuration:
    call-setters-on-nulls: true

保存配置后重新运行测试代码。此时检查接口响应数据,可以发现即使数据库字段为空,返回的Map结构中也依然保留了该字段键,只是其对应的值为null:

通过上述两步配置,既解决了selectByMap的动态条件构造问题,也完善了selectMaps的数据完整性输出能力。

简要总结

掌握selectByMap的Map传参机制能简化常规查询逻辑;而针对selectMaps缺失空字段的痛点,仅需一行配置configuration.call-setters-on-nulls: true即可实现完美修复。以上就是MyBatis-Plus selectByMap条件查询与空值处理方法的详细内容,更多关于MyBatis-Plus高级用法的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。