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

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

我已经有一个implements RowMapperUserRowMapper

我怎样才能做到这一点?

我试过了:

 List rows = getJdbcTemplate().queryforList("select * from users"); for(Map row : rows) { } 

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

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

 List users = new ArrayList(); 

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

 public List findById(int userId) { return getJdbcTemplate().query( "SELECT * FROM users WHERE user_id=?", new UserRowMapper(), userId ); } 

或类似的东西:

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

query()方法实际上已多次重载,因此您通常可以找到至少一种适用于任何给定情况下所需内容的flavor。

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

 List users = getJdbcTemplate().query("select * from users", new UserRowMapper()); 
 public class UsuarioBean { int idUsuario; String userName; String clave; String nombres; String paterno; String materno; String correo; String direccion; String telefono; String estado; Date fec_alta; //...... } //la interface RowMapper del modulo Spring JDBC public class UsuarioMapper implements RowMapper{ public UsuarioBean mapRow(ResultSet rs, int rowNum) throws SQLException { UsuarioBean usuario = new UsuarioBean(); //se esta realizando el mapeo del bean con las columnas de BD manualmente usuario.setIdUsuario(rs.getInt("id_usuario")); usuario.setUserName(rs.getString("username")); usuario.setClave(rs.getString("clave")); usuario.setNombres(rs.getString("nombres")); usuario.setPaterno(rs.getString("paterno")); usuario.setMaterno(rs.getString("materno")); usuario.setCorreo(rs.getString("correo")); usuario.setDireccion(rs.getString("direccion")); usuario.setTelefono(rs.getString("telefono")); usuario.setEstado(rs.getString("estado")); usuario.setFec_alta(rs.getDate("fec_alta")); return usuario; } } public interface UsuarioDao{ List listarUsuarios(); UsuarioBean obtenerUsuario(int idUsuario); int crearUsuario(UsuarioBean usuario); int modificarUsuario(UsuarioBean usuario); int eliminarUsuario(int idUsuario); } @Repository//con esto lo subimos al Spring Container public class UsuarioDaoImpl implements UsuarioDao{ @Autowired//con esto estamos inyectando UsuarioDaoImpl el jdbcTemplate private JdbcTemplate jdbcTemplate; @Override public List listarUsuarios(){ String sql="SELECT * FROM USUARIO"; return jdbcTemplate.query(sql, new UsuarioMapper()); } @Override public UsuarioBean obtenerUsuario(int idUsuario){ String sql="SELECT * FROM USUARIO WHERE ID_USUARIO=?"; return jdbcTemplate.queryForObject(sql, new Object[]{idUsuario},new UsuarioMapper()); } @Override public int crearUsuario(UsuarioBean usuario){ String sql="INSERT INTO USUARIO(username,clave,nombres,paterno,materno,correo,direccion,telefono,fec_alta,estado) VALUES (?,?,?,?,?,?,?,?,?,?)"; Object[] params=new Object[]{usuario.getUserName(),usuario.getClave(),usuario.getNombres(),usuario.getPaterno(),usuario.getMaterno(),usuario.getCorreo(),usuario.getDireccion(),usuario.getTelefono(),this.convertirFecha(usuario.getFec_alta()),usuario.getEstado()}; return jdbcTemplate.update(sql,params); } @Override public int modificarUsuario(UsuarioBean usuario){ String sql="UPDATE USUARIO SET username=?,clave=?,nombres=?,paterno=?,materno=?,correo=?,direccion=?,telefono=?,estado=? WHERE ID_USUARIO=?"; Object[] params=new Object[]{usuario.getUserName(),usuario.getClave(),usuario.getNombres(),usuario.getPaterno(),usuario.getMaterno(),usuario.getCorreo(),usuario.getDireccion(),usuario.getTelefono(),usuario.getEstado(),usuario.getIdUsuario()}; return jdbcTemplate.update(sql,params); } @Override public int eliminarUsuario(int idUsuario){ String sql="DELETE FROM USUARIO WHERE ID_USUARIO=?"; return jdbcTemplate.update(sql,new Object[]{idUsuario}); } public java.sql.Date convertirFecha(java.util.Date fecha){ return new Date((Objects.nonNull(fecha))?fecha.getTime():null); } } 

这个问题有点晚了,但是使用Lambda表达式和RowMapper,下面的语句对我来说也是类似的问题。

 List users = jdbcTemplate.query("select * from users", (rs, rowNum) -> new User(rs.getString("userId"), rs.getString("userName")));