Implementação de Operações CRUD com Spring Framework e Pool de Conexões C3P0

Inclua os arquivos JAR do Spring Framework e do C3P0 no classpath do seu projeto.

  1. 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>
   
  1. 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);
   

Tags: Spring Framework C3P0 JdbcTemplate jdbc CRUD

Publicado em 7-19 11:30