Hint
This article is generated by AI translation.
RowMapper
RowMapper maps each row while reading a ResultSet. You do not need to manage the ResultSet flow—just focus on processing each row.
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 = ...
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: Builder
List<User> result = adapter.queryByEntity(User.class)
.le(User::getId, 100) // match IDs <= 100
.queryForList(userRowMapper); // use RowMapper for result set
Example: Mapper File
<select id="queryListByAge" resultRowMapper="com.example.dto.UserRowMapper">
select * from users where age = #{age}
</select>
Built-ins
dbVisitor ships 4 RowMapper implementations; you can extend as needed.
ColumnMapRowMapper
// Convert each row to a Map
String querySql = "select * from users where age > 40";
RowMapper rowMapper = new ColumnMapRowMapper();
List<Map<String, Object>> result = jdbcTemplate.queryForList(querySql, rowMapper);
SingleColumnRowMapper
// Use when the query returns a single column
String querySql = "select name from users where age > 40";
RowMapper rowMapper = new SingleColumnRowMapper();
List<String> result = jdbcTemplate.queryForList(querySql, rowMapper);
BeanMappingRowMapper
// Map rows to beans via object mapping
String querySql = "select * from users where age > 40";
RowMapper rowMapper = new MappingRowMapper<>(TestUser.class);
List<TestUser> result = jdbcTemplate.queryForList(querySql, rowMapper);
MapMappingRowMapper
// Map rows to Map via object mapping
String querySql = "select * from users where age > 40";
RowMapper rowMapper = new MapMappingRowMapper<>(TestUser.class);
List<Map<String, Object>> result = jdbcTemplate.queryForList(querySql, rowMapper);
Tip
Both ColumnMapRowMapper and MapMappingRowMapper return Map, but differ as follows:
- ColumnMapRowMapper handles arbitrary column sets, e.g., select *.
- MapMappingRowMapper uses the entity type from its constructor to decide the maximum columns in the result set, regardless of whether select * is used.