我对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;
}
}
答案 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框架。如果你想要整个域对象,这就是你要走的路。