Skip to main content
Hint

This article is generated by AI translation.

RowMapper

RowMapper maps each row when reading a ResultSet. You do not need to manage the ResultSet traversal—just focus on converting each row's data.

Interface Definition
@FunctionalInterface
public interface RowMapper<T> {
T mapRow(ResultSet rs, int rowNum) throws SQLException;
}
Custom Implementation Example
public class UserRowMapper implements RowMapper<User> {
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
return user;
}
}

How to Use

Example: Programmatic API
UserRowMapper userRowMapper = new UserRowMapper();
List<User> result = jdbc.queryForList("select * from users", userRowMapper);
Example: Declarative API
@SimpleMapper
public interface UserMapper {
@Query(value = "select * from users where id > #{id}",
resultRowMapper = UserRowMapper.class)
List<User> listUsers(@Param("id") long searchId);
}
Example: Fluent API
List<User> result = lambda.query(User.class)
.le(User::getId, 100)
.queryForList(userRowMapper);
Example: Mapper File
<select id="queryListByAge" resultRowMapper="com.example.dto.UserRowMapper">
select * from users where age = #{age}
</select>

Built-ins

dbVisitor ships with 5 built-in RowMapper implementations; you can extend further as needed.

ColumnMapRowMapper
// Convert each row to Map<String, Object>, suitable for any query
String querySql = "select * from users where age > 40";
RowMapper<Map<String, Object>> rowMapper = new ColumnMapRowMapper();
List<Map<String, Object>> result = jdbc.queryForList(querySql, rowMapper);
SingleColumnRowMapper
// When the query result has only one column, convert directly to target type
String querySql = "select name from users where age > 40";
RowMapper<String> rowMapper = new SingleColumnRowMapper<>(String.class);
List<String> result = jdbc.queryForList(querySql, rowMapper);
BeanMappingRowMapper
// Map each row to a Bean based on ORM mapping
String querySql = "select * from users where age > 40";
RowMapper<TestUser> rowMapper = new BeanMappingRowMapper<>(TestUser.class);
List<TestUser> result = jdbc.queryForList(querySql, rowMapper);
MapMappingRowMapper
// Map each row to a Map based on ORM mapping (only includes declared mapped columns)
String querySql = "select * from users where age > 40";
RowMapper<Map<String, Object>> rowMapper = new MapMappingRowMapper<>(TestUser.class);
List<Map<String, Object>> result = jdbc.queryForList(querySql, rowMapper);
TypeHandlerColumnRowMapper
// When the query result has only one column, use a specified TypeHandler for type conversion
String querySql = "select create_time from users where age > 40";
RowMapper<LocalDateTime> rowMapper = new TypeHandlerColumnRowMapper<>(new LocalDateTimeOfTimestampTypeHandler());
List<LocalDateTime> result = jdbc.queryForList(querySql, rowMapper);
Difference between ColumnMapRowMapper and MapMappingRowMapper

Both return Map, but behave differently:

  • ColumnMapRowMapper — Puts all columns returned by the query into the Map, suitable for select * and any arbitrary queries.
  • MapMappingRowMapper — Based on the entity type from its constructor, only retains columns declared in ORM mapping; extra queried columns are ignored.