A classe
JDBCTemplate é parte do Spring JDBC, utilizada para reduzir o volume de instruções/código na definição dos comandos para o banco de dados, executado via
JDBC.
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