在 Java 中查询数据库后,如果希望返回的 Map 数据中的 key 保持驼峰命名(而不是自动转换为大写),可以通过以下几种方式实现:


方法 1:配置 MyBatis 映射(推荐)

如果使用 MyBatis 或 MyBatis-Plus,可以在查询时指定 resultType 为 Map,并通过 @MapKey 或全局配置保持驼峰命名。

1.1 全局配置(推荐)

在 application.yml 或 application.properties 中配置 MyBatis 的 map-underscore-to-camel-case

yamlmybatis:configuration:map-underscore-to-camel-case: true  # 开启下划线转驼峰

1.2 查询时返回 Map

java@Select("SELECT user_id as userId, user_name as userName FROM sys_user")List<Map<String, Object>> selectUserList();
  • 通过 as 显式指定列别名(驼峰格式),MyBatis 会直接使用别名作为 Map 的 key。

方法 2:使用 MyBatis-Plus 的 QueryWrapper

如果使用 MyBatis-Plus,可以通过 select() 方法指定查询字段并设置别名:

javaQueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();queryWrapper.select("user_id as userId", "user_name as userName");List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);
  • 返回的 Map 的 key 会是 userIduserName(驼峰格式)。

方法 3:手动转换结果(通用方案)

如果无法修改 SQL 或配置,可以在 Java 代码中手动转换 Map 的 key:

javaList<Map<String, Object>> originalList = jdbcTemplate.queryForList("SELECT user_id, user_name FROM sys_user");// 转换为驼峰命名的 MapList<Map<String, Object>> resultList = originalList.stream().map(originalMap -> {Map<String, Object> newMap = new HashMap<>();originalMap.forEach((key, value) -> {// 下划线转驼峰(简单实现)String camelKey = key.replaceAll("_(\\w)", (m) -> m.group(1).toUpperCase());newMap.put(camelKey, value);});return newMap;}).collect(Collectors.toList());

方法 4:JdbcTemplate 配置(Spring Boot)

如果使用 JdbcTemplate,可以通过 RowMapper 手动控制字段名:

javaList<Map<String, Object>> list = jdbcTemplate.query("SELECT user_id, user_name FROM sys_user",(rs) -> {Map<String, Object> map = new HashMap<>();map.put("userId", rs.getObject("user_id"));map.put("userName", rs.getObject("user_name"));return map;});

方法 5:数据库驱动配置(如 MySQL)

某些数据库驱动(如 MySQL JDBC)支持配置返回的列名大小写:

properties# MySQL 连接参数(保持列名原始格式)spring.datasource.url=jdbc:mysql://localhost:3306/db?useInformationSchema=true&nullCatalogMeansCurrent=true&useOldAliasMetadataBehavior=true
  • useOldAliasMetadataBehavior=true 可以让驱动返回原始列名(而非大写)。

总结

方法

适用场景

备注

MyBatis 全局配置

使用 MyBatis/MyBatis-Plus

最推荐,一劳永逸

SQL 别名 (as)

精确控制字段名

适用于固定查询

手动转换

无法修改 SQL 或配置

灵活性高,但需额外代码

JdbcTemplate RowMapper

原生 JDBC 操作

适合简单查询

数据库驱动参数

特定数据库(如 MySQL)

依赖驱动实现

推荐方案

  1. 优先通过 MyBatis 全局配置 或 SQL 别名 实现。
  2. 如果使用 MyBatis-Plus,直接用 QueryWrapper.select() 指定别名。
  3. 特殊情况再考虑手动转换或驱动配置。

这样可以确保查询返回的 Map 中的 key 始终是驼峰格式(如 userId 而非 USER_ID)。