阅读(2152) 赞(1)

HasorDB RowMapper(数据读取并转换成对象)

2021-12-28 15:36:36 更新

将 ​ResultSet ​一行数据读取出来并且转换成对象的工作是 ​RowMapper ​来负责完成。

在 HasorDB 中一共内置了三种 RowMapper,除此之外用户可以自己所以扩展。

  • ​ColumnMapRowMapper ​将行转换为 Map
  • ​MappingRowMapper ​基于 ​对象映射​ 处理行数据。
  • ​SingleColumnRowMapper ​只有当查询结果中包含一列数据的时候才可以使用。它会利用 ​TypeHandler ​机制读取出这一列数据。

ColumnMapRowMapper​

使用 ​ColumnMapRowMapper​

String querySql = "select * from test_user where age > 40";
RowMapper rowMapper = new ColumnMapRowMapper();
List<Map<String, Object>> result = jdbcTemplate.query(querySql, rowMapper);

下列是简化形式

List<Map<String, Object>> result = jdbcTemplate.queryForList(querySql);

MappingRowMapper​

使用 ​MappingRowMapper​

String querySql = "select * from test_user where age > 40";
RowMapper rowMapper = new MappingRowMapper<>(TestUser.class);
List<TestUser> result = jdbcTemplate.query(querySql, rowMapper);

下列是简化形式

List<TestUser> result = jdbcTemplate.queryForList(querySql, TestUser.class);

SingleColumnRowMapper​

使用​ SingleColumnRowMapper​

String querySql = "select name from test_user where age > 40";
RowMapper rowMapper = new SingleColumnRowMapper<>(String.class);
List<String> result = jdbcTemplate.query(querySql, rowMapper);

下列是简化形式

List<String> result = jdbcTemplate.queryForList(querySql, String.class);

自定义 RowMapper​

读取一行数据,并且只设置 ​age ​和 ​name​

String queryString = "select * from test_user where age > 40";
RowMapper rowMapper = new RowMapper<TestUser>() {
    public TestUser mapRow(ResultSet rs,int rowNum)throws SQLException{
        TestUser testUser=new TestUser();
        testUser.setAge(rs.getInt("age"));
        testUser.setName(rs.getString("name"));
        return testUser;
    }
};

List<TestUser> mapList = jdbcTemplate.query(queryString, rowMapper);