Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回一个列表,我已经有了一个rowmapper实现_Java_Spring_Generics_Jdbctemplate - Fatal编程技术网

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

Java 返回一个列表,我已经有了一个rowmapper实现,java,spring,generics,jdbctemplate,Java,Spring,Generics,Jdbctemplate,在我的UserDao中,我想返回一个用户列表 我已经有了一个UserRowMapper,它实现了RowMapper 我该怎么做 我试过: List rows = getJdbcTemplate().queryforList("select * from users"); for(Map row : rows) { } 但不确定如何使用我的UserRowMapper填充用户对象并将其插入我的用户列表 顺便说一句,这是我应该使用的最佳通用列表: List<User> users =

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

我已经有了一个
UserRowMapper
,它
实现了RowMapper

我该怎么做

我试过:

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

for(Map row : rows) {

}
但不确定如何使用我的UserRowMapper填充用户对象并将其插入我的用户列表

顺便说一句,这是我应该使用的最佳通用列表:

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

使用,而不是
queryForList()

List users=getJdbcTemplate();
使用,您可以为
占位符传入数量可变的值作为最后一个参数:

公共列表findById(int userId)
{
返回getJdbcTemplate().query(
“从用户_id=?”的用户中选择*”,
新建UserRowMapper(),
用户ID
);
}
或者类似于:

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
        );
}
公共列表findByManyParams(int-param1、int-param2、String-param3)
{
返回getJdbcTemplate().query(
“从用户中选择*,其中foo=?和bar=?以及foobar=?”,
新建UserRowMapper(),
参数1,
参数2,
param3
);
}
query()
方法实际上被多次重载,因此您通常可以找到至少一种在任何给定情况下都能满足您需要的风格。

公共类{
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);
    }
}
伊杜萨里奥国际酒店; 字符串用户名; 弦乐; 字符串名称; 字符串paterno; 弦母; 弦科雷奥; 弦定向; 弦乐; 字符串estado; 日期fec_alta; //...... } //la接口行映射器del modulo Spring JDBC 公共类UsuarioMapper实现行映射器{ public UsuarioBean映射行(ResultSet rs,int rowNum)抛出SQLException{ UsuarioBean usuario=新的UsuarioBean(); //在BD手册的专栏中,这是一个很好的例子 usuario.setIdUsuario(rs.getInt(“id_usuario”); usuario.setUserName(rs.getString(“用户名”); 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”); 返回usuario; } } 公共接口{ 列出listarUsuarios(); UsuarioBean obtenerUsuario(intidusuario); int CREARUASUARIO(usuario); int MODIFICARUASUARIO(USUARIBEAN usuario); 内部eliminarUsuario(内部Idusario); } @存储库//con esto lo subimos al-Spring Container 公共类usuariodaimpl实现UsuarioDao{ @Autowired//con esto estamos inyectando USUARIDAOIIMPLL el jdbcTemplate 私有JdbcTemplate JdbcTemplate; @凌驾 公共列表列表{ String sql=“SELECT*FROM USUARIO”; 返回jdbcTemplate.query(sql,新的UsuarioMapper()); } @凌驾 公共Usuario获得者Usuario(int idUsuario){ String sql=“SELECT*FROM USUARIO,其中ID_USUARIO=?”; 返回jdbcTemplate.queryForObject(sql,新对象[]{idUsuario},新的UsuarioMapper()); } @凌驾 克里亚鲁苏亚里奥公共酒店(usuario){ String sql=“插入到USUARIO(用户名、密码、名称、家长号、母校号、科雷奥号、董事会号、电话号码、fec_alta、estado)值(?,,,,,,,,,,,?)”; Object[]params=new Object[]{usuario.getUserName(),usuario.getClave(),usuario.getNombres(),usuario.getPaterno(),usuario.getMaterno(),usuario.getCorreo(),usuario.getdirecion(),usuario.getelefono(),this.convertirFecha(usuario.getFec_alta()),usuario.getEstado(); 返回jdbcTemplate.update(sql,params); } @凌驾 公共int修改协议(USUARIBOAN usuario){ String sql=“UPDATE USUARIO SET username=?,clave=?,nombres=?,paterno=?,materno=?,correo=?,direccion=?,telefono=?,estado=?其中ID_USUARIO=?”; Object[]params=new Object[]{usuario.getUserName(),usuario.getClave(),usuario.getNombres(),usuario.getPaterno(),usuario.getMaterno(),usuario.getCorreo(),usuario.getdirection(),usuario.getelefono(),usuario.getEstado(),usuario.getIdUsuario(); 返回jdbcTemplate.update(sql,params); } @凌驾 公共内部eliminarUsuario(内部Idusario){ String sql=“从USUARIO删除,其中ID_USUARIO=?”; 返回jdbcTemplate.update(sql,新对象[]{idUsuario}); } public java.sql.Date convertirFecha(java.util.Date-fecha){ 返回新日期((Objects.nonNull(fecha))?fecha.getTime():null); } }
这个问题有点晚了,但对于Lambda表达式和RowMapper,下面的语句对我解决类似的问题很有效

List<User> users = jdbcTemplate.query("select * from users", (rs, rowNum) -> new User(rs.getString("userId"), rs.getString("userName")));
List users=jdbcTemplate.query(“从用户中选择*,(rs,rowNum)->新用户(rs.getString(“userId”)、rs.getString(“userName”));

推土机(或BeanCopy)是否可以帮助您转换为指定的对象类型?一定要检查它们。
ArrayList
在大多数情况下应该足够好(tm)。(即,当不在一个非常大的列表的开始/中间插入元素时。)但是如果我的sql中有占位符,比如
“Select*from users where id>?”
,当我添加参数时,它不会编译。@Blankman文档中列出的方法大约有无数重载。其中一个肯定接受占位符值。宾果!我使用queryForList时得到了一个错误的sql语句。谢谢这是一个完美而正确的例子,只是想为那些从JdbcTemplate开始的人强调一下,在查询中最后一个参数
foobar
是String,但是当我们创建查询字符串时,我们不需要使用引号。这是科尔
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);
    }
}
List<User> users = jdbcTemplate.query("select * from users", (rs, rowNum) -> new User(rs.getString("userId"), rs.getString("userName")));