web-dev-qa-db-ja.com

リストを返す、私はすでに行マッパー実装を持っています

私のUserDaoで、ユーザーのリストを返します。

私はすでにUserRowMapperを持っていますimplements RowMapper<User>

これどうやってするの?

私は試した:

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

for(Map row : rows) {

}

しかし、私のUserRowMapperを使用してUserオブジェクトを作成し、それをユーザーのリストに挿入する方法がわかりませんでした。

ところで、これは私が使用すべき最も一般的なリストですか?

List<User> users = new ArrayList<User>();

15
Blankman

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
        );
}
_

または次のようなもの:

_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
        );
}
_

query()メソッドは実際には何度もオーバーロードされているため、通常、特定の状況で必要なものに機能するフレーバーを少なくとも1つ見つけることができます。

41
The Awnry Bear

query() を使用します。queryForList()ではありません。

List<User> users = getJdbcTemplate().query("select * from users", new UserRowMapper());
7
millimoose

この質問には少し遅れましたが、Lambda式とRowMapperを使用すると、同様の問題に対して以下のステートメントが機能しました。

List<User> users = jdbcTemplate.query("select * from users", (rs, rowNum) -> new User(rs.getString("userId"), rs.getString("userName")));
2
Sriram
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<UsuarioBean>{

    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<UsuarioBean> 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<UsuarioBean> 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);
    }
}
1
user7197188