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