9.2 List/Map
Using Map to receive query results is the most versatile approach. Each row is represented as a Map<String, Object> mapping column names to values, without needing to predefine entity classes.
Single row query
Map<String, Object> data = jdbc.queryForMap("select * from users where id = 1");
How to Use
Example: Programmatic API
List<Map<String, Object>> result = jdbc.queryForList("select * from users");
Example: Declarative API
@SimpleMapper
public interface UserMapper {
@Query("select * from users where id > #{id}")
List<Map<String, Object>> listUsers(@Param("id") long searchId);
}
Example: Builder API
List<Map<String, Object>> result = lambda.query(User.class)
.le(User::getId, 100)
.queryForMapList();
Example: Mapper File
<select id="queryListByAge" resultType="map">
select * from users where age = #{age}
</select>
resultType options
| Value | Corresponding Type | Description |
|---|---|---|
map | LinkedCaseInsensitiveMap (default) | Column name case-insensitive, affected by global configuration |
hashmap | HashMap | Unordered, column name case-sensitive |
linkedmap | LinkedHashMap | Maintains insertion order, column name case-sensitive |
caseinsensitivemap | LinkedCaseInsensitiveMap | Column name case-insensitive |
Column Name Case Sensitivity
Different databases may return column names with different casing. Oracle often returns uppercase column names, while MySQL often returns lowercase names. dbVisitor uses a case-insensitive Map by default so both row.get("id") and row.get("ID") can work.
Default: case-insensitive column names
List<Map<String, Object>> rows = jdbc.queryForList("select * from users");
Object id = rows.get(0).get("id");
Object sameId = rows.get(0).get("ID");
If you want to preserve the exact column-name casing returned by the driver, disable this behavior.
Strict case sensitivity
JdbcTemplate jdbc = ...;
jdbc.setResultsCaseInsensitive(false);
List<Map<String, Object>> rows = jdbc.queryForList("select * from users");
After disabling it, results are stored in LinkedHashMap, and column-name keys become case-sensitive.