关于Spring Rowmapper,mapRow

时间:2014-06-30 17:42:05

标签: spring spring-mvc bind jdbctemplate

我对Spring rowmapper有一些疑问。我将使用rowmapper从我的数据库接收数据。但是我的命令对象'Table'只有List变量。 Rowmapper是否自动将每条记录映射到List?是posibble? 我知道spring bind标签会自动将值绑定到列表。

对此。

Table.java

public class Table implements Serializable{
    private List<String> tableNum = new ArrayList<String>();

// setter and getter
}

private class TableRowMapper implements RowMapper {
         public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
                Table table = new Table();
            table.setTableNum(rs.getString("TABLE_LOCATION"));
            return table;
        }
    }

1 个答案:

答案 0 :(得分:3)

RowMapper用于将单个行映射到单个域对象,而不是将一堆行映射到单个域对象。此外,RowMapper不是 Dao 类型对象。它将与某些查询方法一起使用,例如JdbcTemplate.query(sql,args,rowMapper)

但在你的情况下,你不需要RowMapper。您应该只使用JdbcTemplate.queryForList。有关详细查询方法,请参阅JdbcTemplate API。一个简单的例子就是:

public class YourDaoImpl extends JdbcTemplate implements YourDao {
    private static final String SQL = 
            "select SOME_FIELD from SOME_TABLE where SOMETHING = ?";

    @Override
    public List<String> getSomeFieldBySomething(String something) {
        return (List<String>)queryForList( SQL, 
                                           new Object[] { something }, 
                                           String.class);
    }
}

您将dao用于您的服务。


<强>更新

  

由于你的帮助,我可以从我的数据库中获得一列。但我遇到了问题。我的db表由多列组成。我必须收到所有这些。和..我怎么能这样做?请帮助我〜!!!

你发布的问题没有任何意义。在这种情况下,您需要制作List<DomainObject>。不是List<String>List<String>仅允许一个值。如果您有List<DomainObject>,则课程DomainObject可以包含您的所有字段。当你使用RowMapper时,那是。您仍然可以使用queryForList变体

RowMapper
public class Table {
    private String field1;
    private String field2;
    private String field3;
    // getters and setters
}

public class YourDaoImpl extends JdbcTemplate implements YourDao {
    private static final String SQL = 
            "select * from SOME_TABLE where SOMETHING = ?";

    @Override
    public List<Table> getTableBySomething(String something) {
        return (List<Table>)queryForList( SQL, 
                                          new Object[] { something }, 
                                          new RowMapper<Table>(){
            @Override
            public Table mapRow(ResultSet rs, int rowNumber) {
                Table table = new Table();
                table.setField1(rs.getString("feild1"));
                // set the others
                return table;
            }
        });
    }
}

除此之外,如果我是你,我会忘记jdbc并去寻找像JPA这样的ORM框架。如果你想要整个域对象,这就是你要走的路。