Spring - Visão geral da estrutura JDBC

Ao trabalhar com o banco de dados usando JDBC simples e antigo, torna-se complicado escrever código desnecessário para lidar com exceções, abrir e fechar conexões de banco de dados, etc. No entanto, o Spring JDBC Framework cuida de todos os detalhes de baixo nível, começando pela abertura da conexão, prepare e executar a instrução SQL, processar exceções, lidar com transações e, finalmente, fechar a conexão.

Portanto, o que você precisa fazer é apenas definir os parâmetros de conexão e especificar a instrução SQL a ser executada e fazer o trabalho necessário para cada iteração enquanto busca dados do banco de dados.

O Spring JDBC fornece várias abordagens e classes correspondentes diferentes para fazer a interface com o banco de dados. Vou usar a abordagem clássica e mais popular, que usaJdbcTemplateclasse do framework. Esta é a classe de estrutura central que gerencia toda a comunicação do banco de dados e tratamento de exceções.

Classe JdbcTemplate

A classe JDBC Template executa consultas SQL, atualiza instruções, armazena chamadas de procedimento, realiza iteração em ResultSets e extrai valores de parâmetros retornados. Ele também captura exceções JDBC e as traduz para a hierarquia de exceção genérica e mais informativa definida no pacote org.springframework.dao.

Instâncias da classe JdbcTemplate são threadsafe depois de configuradas. Portanto, você pode configurar uma única instância de um JdbcTemplate e, em seguida, injetar com segurança essa referência compartilhada em vários DAOs.

Uma prática comum ao usar a classe JDBC Template é configurar um DataSource em seu arquivo de configuração Spring e, em seguida, injetar em dependência esse bean DataSource compartilhado em suas classes DAO, e o JdbcTemplate é criado no setter para o DataSource.

Configurando a fonte de dados

Vamos criar uma tabela de banco de dados Student em nosso banco de dados TEST. Assumimos que você está trabalhando com banco de dados MySQL; se você trabalhar com qualquer outro banco de dados, poderá alterar suas consultas DDL e SQL de acordo.

CREATE TABLE Student(
   ID   INT NOT NULL AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE  INT NOT NULL,
   PRIMARY KEY (ID)
);

Agora precisamos fornecer um DataSource para o modelo JDBC para que ele possa se configurar para obter acesso ao banco de dados. Você pode configurar o DataSource no arquivo XML com um trecho de código, conforme mostrado no seguinte trecho de código -

<bean id = "dataSource" 
   class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name = "driverClassName" value = "com.mysql.jdbc.Driver"/>
   <property name = "url" value = "jdbc:mysql://localhost:3306/TEST"/>
   <property name = "username" value = "root"/>
   <property name = "password" value = "password"/>
</bean>

Objeto de acesso a dados (DAO)

DAO significa Data Access Object, que é comumente usado para interação de banco de dados. Os DAOs existem para fornecer um meio de ler e gravar dados no banco de dados e devem expor essa funcionalidade por meio de uma interface pela qual o restante do aplicativo os acessará.

O suporte DAO no Spring torna mais fácil trabalhar com tecnologias de acesso a dados como JDBC, Hibernate, JPA ou JDO de maneira consistente.

Execução de instruções SQL

Vamos ver como podemos realizar a operação CRUD (Criar, Ler, Atualizar e Excluir) em tabelas de banco de dados usando o objeto SQL e modelo JDBC.

Querying for an integer

String SQL = "select count(*) from Student";
int rowCount = jdbcTemplateObject.queryForInt( SQL );

Querying for a long

String SQL = "select count(*) from Student";
long rowCount = jdbcTemplateObject.queryForLong( SQL );

A simple query using a bind variable

String SQL = "select age from Student where id = ?";
int age = jdbcTemplateObject.queryForInt(SQL, new Object[]{10});

Querying for a String

String SQL = "select name from Student where id = ?";
String name = jdbcTemplateObject.queryForObject(SQL, new Object[]{10}, String.class);

Querying and returning an object

String SQL = "select * from Student where id = ?";
Student student = jdbcTemplateObject.queryForObject(
   SQL, new Object[]{10}, new StudentMapper());

public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setID(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));
      
      return student;
   }
}

Querying and returning multiple objects

String SQL = "select * from Student";
List<Student> students = jdbcTemplateObject.query(
   SQL, new StudentMapper());

public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setID(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));
      
      return student;
   }
}

Inserting a row into the table

String SQL = "insert into Student (name, age) values (?, ?)";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 11} );

Updating a row into the table

String SQL = "update Student set name = ? where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 10} );

Deleting a row from the table

String SQL = "delete Student where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{20} );

Executando Declarações DDL

Você pode usar o execute(..)método de jdbcTemplate para executar quaisquer instruções SQL ou instruções DDL. A seguir está um exemplo para usar a instrução CREATE para criar uma tabela -

String SQL = "CREATE TABLE Student( " +
   "ID   INT NOT NULL AUTO_INCREMENT, " +
   "NAME VARCHAR(20) NOT NULL, " +
   "AGE  INT NOT NULL, " +
   "PRIMARY KEY (ID));"

jdbcTemplateObject.execute( SQL );

Exemplos de estrutura Spring JDBC

Com base nos conceitos acima, vamos verificar alguns exemplos importantes que o ajudarão a entender o uso do framework JDBC no Spring -

Sr. Não. Exemplo e descrição
1 Exemplo de Spring JDBC

Este exemplo explicará como escrever um aplicativo Spring simples baseado em JDBC.

2 Procedimento armazenado SQL na primavera

Aprenda como chamar o procedimento armazenado SQL ao usar JDBC no Spring.