A seguir um trecho de código com um DAO para entidade Cliente, que demonstra como é simples utilizar o insert via JdbcTemplate:
import org.springframework.jdbc.core.JdbcTemplate;
public class ClienteDAO {
private JdbcTemplate jdbcTemplate; //set p/ injecao...
public void insert(Cliente clie) {
final String sql = "INSERT INTO CLIENTES(NOME, CPF) VALUES (?, ?)";
jdbcTemplate.update(sql, new Object[] { clie.getNome(), clie.getCpf() });
}
}
É muito comum que o ID (chave primária) de um registro seja gerado pelo banco de dados. No MySQL isso é possível com o auto incremento, no caso do Oracle é possível via SEQUENCE.
A versão do método insert a seguir, demonstra como realizar o comando com JdbcTemplate e recuperar o ID gerado pelo banco através do KeyHolder. Utilizo a sobrecarga do método update, informando o PreparedStatementCreator do Spring MVC (gerador de PreparedStament).
public void insert(final Cliente clie) {
final String sql = "INSERT INTO CLIENTES(NOME, CPF) VALUES (?, ?)";
PreparedStatementCreator psc = new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con)
throws SQLException {
//indico a coluna com valor gerado pelo banco de dados
PreparedStatement ps = con.prepareStatement(sql, new String[] { "id" });
//preencho os parametros (?, ?)
ps.setString(1, clie.getNome());
ps.setString(2, clie.getCpf());
return ps;
}
}
//recupera o valor gerado para o id
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(psc, keyHolder);
//atualizo a informacao do id, no objeto cliente
cliente.setId(keyHolder.getKey().intValue());
}
O detalhe é que durante a criação do PreparedStament, em Connection, eu passo o argumento com o nome da coluna gerada via auto incremento/SEQUENCE, nesse caso o "id". Esse código funciona com Oracle e MySQL.
@edermag
No comments:
Post a Comment