返回一个列表,我已经有了一个rowmapper实现
在我的UserDao中,我想返回一个用户列表。
我已经有一个implements RowMapper
的UserRowMapper
。
我怎样才能做到这一点?
我试过了:
List rows = getJdbcTemplate().queryforList("select * from users"); for(Map row : rows) { }
但不知道如何使用我的UserRowMapper来填充User对象并将其插入到我的用户List列表中。
BTW,这是我最好使用的通用列表:
List users = new ArrayList();
?
使用JdbcTemplate.query(String sql, RowMapper
,你可以为?
传递可变数量的值?
占位符作为最后一个参数:
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")));