MyBatis-Plus selectByMap查询与selectMaps空值处理
在使用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高级用法的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













