返回一个列表,我已经有了一个rowmapper实现

Bla*_*man 14 java generics spring jdbctemplate

在我的UserDao中,我想返回一个用户列表.

我已经有一个UserRowMapperimplements RowMapper<User>.

我怎样才能做到这一点?

我试过了:

List rows = getJdbcTemplate().queryforList("select * from users");

for(Map row : rows) {

}
Run Code Online (Sandbox Code Playgroud)

但不知道如何使用我的UserRowMapper来填充User对象并将其插入到我的用户List列表中.

BTW,这是我最好使用的通用列表:

List<User> users = new ArrayList<User>();
Run Code Online (Sandbox Code Playgroud)

The*_*ear 41

使用JdbcTemplate.query(String sql, RowMapper<T> rowMapper, Object... args),您可以为?占位符传递可变数量的值作为最后一个参数:

public List<User> findById(int userId)
{
    return getJdbcTemplate().query(
            "SELECT * FROM users WHERE user_id=?",
            new UserRowMapper(),
            userId
        );
}
Run Code Online (Sandbox Code Playgroud)

或类似的东西:

public List<User> findByManyParams(int param1, int param2, String param3)
{
    return getJdbcTemplate().query(
            "SELECT * FROM users WHERE foo=? AND bar=? AND foobar=?",
            new UserRowMapper(),
            param1,
            param2,
            param3
        );
}
Run Code Online (Sandbox Code Playgroud)

query()方法实际上已多次重载,因此您通常可以找到至少一种适合您在任何给定情况下所需的风格.

  • 这是完美而正确的例子,只是想为那些以JdbcTemplate开头的人强调在查询中最后一个参数`foobar`是String,但是当我们创建查询字符串时,我们不需要使用引号.例如.这是正确的`AND foobar =?`,但使用引号是不正确的,例如.这个`AND foobar ='?'`会产生错误.(也许这个小评论可以帮助别人避免一个微妙的错误) (2认同)

mil*_*ose 7

使用query(),而不是queryForList():

List<User> users = getJdbcTemplate().query("select * from users", new UserRowMapper());
Run Code Online (Sandbox Code Playgroud)