Inclua os arquivos JAR do Spring Framework e do C3P0 no classpath do seu projeto.
- Configuração do Fonte de Dados no Spring
Crie um arquivo de configuração Spring (por exemplo, applicationContext.xml) e defina o bean para o pool de conexões C3P0.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Configuração do Pool de Conexões C3P0 -->
<bean id="fonteDados" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/banco_de_dados?useSSL=false&serverTimezone=UTC"/>
<property name="user" value="usuario"/>
<property name="password" value="senha"/>
<property name="maxPoolSize" value="10"/>
<property name="minPoolSize" value="3"/>
<property name="initialPoolSize" value="3"/>
</bean>
<!-- Configuração do JdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="fonteDados"/>
</bean>
</beans>
- Implementação do Código
Defina uma classe de modelo para representar a entidade do banco de dados.
package com.exemplo.modelo;
public class Pais {
private String identificador;
private String descricao;
// Getters e Setters
public String getIdentificador() {
return identificador;
}
public void setIdentificador(String identificador) {
this.identificador = identificador;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
@Override
public String toString() {
return "Pais [identificador=" + identificador + ", descricao=" + descricao + "]";
}
}
Atualização de um Registro
Utilize o JdbcTemplate injetado pelo Spring para executar uma atualização.
package com.exemplo.aplicacao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
public class AtualizacaoSimples {
public static void main(String[] args) {
ApplicationContext contexto = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplate jdbcTemplate = contexto.getBean(JdbcTemplate.class);
String sql = "UPDATE tabela_paises SET descricao = ? WHERE identificador = ?";
int linhasAfetadas = jdbcTemplate.update(sql, "Nova Descrição", "PAIS001");
System.out.println("Registros atualizados: " + linhasAfetadas);
}
}
Inserção de Dados
Inserção Individual
// Dentro de um método main ou serviço
String sqlInsercao = "INSERT INTO tabela_paises (identificador, descricao) VALUES (?, ?)";
jdbcTemplate.update(sqlInsercao, "PAIS005", "País Exemplo");
Inserção em Lote
import java.util.ArrayList;
import java.util.List;
List<Object[]> argumentosLote = new ArrayList<>();
argumentosLote.add(new Object[]{"PAIS006", "País Alfa"});
argumentosLote.add(new Object[]{"PAIS007", "País Beta"});
String sqlLote = "INSERT INTO tabela_paises (identificador, descricao) VALUES (?, ?)";
int[] resultados = jdbcTemplate.batchUpdate(sqlLote, argumentosLote);
System.out.println("Total de linhas inseridas no lote: " + resultados.length);
Consultas ao Banco de Dados
Cosnulta de um Único Registro
import org.springframework.jdbc.core.BeanPropertyRowMapper;
String sqlConsultaUnica = "SELECT identificador, descricao FROM tabela_paises WHERE identificador = ?";
BeanPropertyRowMapper<Pais> mapeador = BeanPropertyRowMapper.newInstance(Pais.class);
Pais paisEncontrado = jdbcTemplate.queryForObject(sqlConsultaUnica, mapeador, "PAIS001");
System.out.println("Resultado: " + paisEncontrado);
Consulta de Múltiplos Registros
import java.util.List;
String sqlConsultaLista = "SELECT identificador, descricao FROM tabela_paises";
List<Pais> listaPaises = jdbcTemplate.query(sqlConsultaLista, mapeador);
for (Pais item : listaPaises) {
System.out.println(item);
}
Consluta com Função de Agregação
String sqlContagem = "SELECT COUNT(*) FROM tabela_paises";
Long totalRegistros = jdbcTemplate.queryForObject(sqlContagem, Long.class);
System.out.println("Total de países cadastrados: " + totalRegistros);
Utilização de Parâmetros Nomeados
Para consultas com parâmetros nomeados (:parametro), utilize o NamedParameterJdbcTemplate.
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import java.util.Map;
ApplicationContext contexto = new ClassPathXmlApplicationContext("applicationContext.xml");
NamedParameterJdbcTemplate namedJdbc = new NamedParameterJdbcTemplate(contexto.getBean("fonteDados"));
String sqlNomeado = "SELECT identificador, descricao FROM tabela_paises WHERE identificador = :cod";
MapSqlParameterSource parametros = new MapSqlParameterSource();
parametros.addValue("cod", "PAIS001");
Pais resultado = namedJdbc.queryForObject(sqlNomeado, parametros, mapeador);
System.out.println("Consulta com parâmetro nomeado: " + resultado);