在 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 会是userId
、userName
(驼峰格式)。
方法 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 别名 ( | 精确控制字段名 | 适用于固定查询 |
手动转换 | 无法修改 SQL 或配置 | 灵活性高,但需额外代码 |
JdbcTemplate RowMapper | 原生 JDBC 操作 | 适合简单查询 |
数据库驱动参数 | 特定数据库(如 MySQL) | 依赖驱动实现 |
推荐方案:
- 优先通过 MyBatis 全局配置 或 SQL 别名 实现。
- 如果使用 MyBatis-Plus,直接用
QueryWrapper.select()
指定别名。 - 特殊情况再考虑手动转换或驱动配置。
这样可以确保查询返回的 Map
中的 key 始终是驼峰格式(如 userId
而非 USER_ID
)。