Skip to main content

使用 List/Map 接收数据

List/Map 的特征是由多个 Map 组成一个集合。是一种常见的数据结构,可以用来通用化的表示不同结构的数据集。

举例
Map<String, Object> data = null;

data = jdbc.queryForMap("select * from users where name = 'Bob'");
data = jdbc.queryForMap("select * from address");

如何使用

例:编程式 API
List<Map<String, Object>> result = jdbc.queryForList("select * from users");
例:声明式 API
@SimpleMapper
public interface UserMapper {
@Query(value = "select * from users where id > #{id}")
List<Map> listUsers(@Param("id") long searchId);
}
例:构造器
List<Map<String, Object>> result = adapter.queryByEntity(User.class)
.le(User::getId, 100) // 匹配 ID 小于等于 100
.queryForMapList(); // 返回 List/Map
例:在 Mapper File
<select id="queryListByAge" resultType="map">
select * from users where age = #{age}
</select>
resultType 属性值可以采用
  • map,使用内置 Map 策略,结果集列名大小写敏感性的设置会影响它,默认是 LinkedCaseInsensitiveMap。
  • hashmap,使用 HashMap
  • linkedmap,使用 LinkedHashMap
  • caseinsensitivemap,使用 LinkedCaseInsensitiveMap

列名大小写敏感性

默认情况下 Map 的 key 对于大小写不敏感。

如下查询
List<Map<String, Object>> result = jdbc.queryForList("select * from users");

users 表在相同表结构和数据在不同数据库中执行结果会有不同,例如:

  • 在 Oracle 返回的列名默认:大写
  • 在 MySQL 返回的列名默认:小写

dbVisitor 默认会采用 LinkedCaseInsensitiveMap 工具类以不区分大小写的方式存储查询结果的列名。

  • 即 resultsCaseInsensitive 参数默认值为 true

如果希望使用大小写敏感的方式存储查询结果,需要将其设置为 false。

JdbcTemplate jdbc = ...
jdbc.setResultsCaseInsensitive(false);

List<Map<String, Object>> result = jdbc.queryForList("select * from users");