Exercício de demonstração de um CRUD usando o padrão DAO com JDBC
Exercício assistido e desenvolvido durante o Curso de Java Completo da plataforma Udemy através do Prof. Dr. Nelio Alves. O repositório das minhas atividades no curso podem ser acessados aqui.
O objetivo deste exercício é implementar manualmente um CRUD (create/read/update/delete) completo de um simples banco de dados utilizando o padrão DAO (Data Acess Object) e o JDBC (Java Database Connectivity).
O JDBC é API padrão do Java para acesso a dados. Vamos utilizar o MySQL como banco de dados e sua respectiva biblioteca de driver para o JDBC.
O padrão DAO é surgiu com a necessidade de separarmos a lógica de negócios da lógica de persistência de dados. Este padrão permite que possamos mudar a forma de persistência sem que isso influencie em nada na lógica de negócio, além de tornar as classes mais legíveis (fonte: DevMedia - DAO Pattern: Persistência de Dados utilizando o padrão DAO).
Então as classes DAO são responsáveis por trocar as informações com o SGBD e fornecer operações CRUD e de pesquisas, implementando as queries do DB. Como a lógica de negócio está desacoplada podemos dizer que o DAO está implementado na camada Model. Mas este exercício ainda não é uma API Rest com as camadas Service e Resource ou Controller da arquitetura MSC ou MSR. É apenas uma prática de como se conectar manualmente ao SGBD.
O DB está representado conforme o diagrama relacional a seguir. O script de SQL está disponível aqui.
A mesma relação das entidades está representado na forma de um diagrama UML conforme figura a seguir (créditos ao material do curso).
O exercício implementa o diagrama UML a seguir, na qual pode-se ver o padrão de código Factory como técnica para instanciar os objetos DAO das entidades. Cada uma delas deverá implementar os métodos do CRUD de suas respectivas interfaces.
O exercício foi desenvolvido na IDE Eclipse versão 2022-14 (4.26.0), Linux Ubuntu 22.04 LTS e Java OpenJDK 11. Mas pode ser executado também em versões superiores.
Para executar este exercício é necessária a biblioteca do driver MySQL para o JDBC. Utilizei o Connector/J do MySQL para Ubuntu na versão 8.0.31.
O programa executa algumas operações pré-definidas conforme descrito na classe Program. São duas baterias de testes, um para cada entidade Seller e outro para Department. São as implementações a seguir:
1.1. findById(id)
- busca um seller pelo id
igual 3 (fixo);
1.2. findByDepartment(department)
- busca todos os sellers de uma entidade department instanciada;
1.3. findAll()
- busca por todos os sellers;
1.4. insert(seller)
- insere um novo seller instanciado;
1.5. update(seller)
- atualizada um seller existente;
1.6. deleteById(id)
- apaga um seller pelo id solicitado via prompt.
2.1. findById(id)
- busca um department pelo id = 3 (fixo);
2.2. findAll()
- busca por todos os departments;
2.3. insert(department)
- insere um novo department instanciado;
2.4. update(department)
- atualizada um department existente;
2.5. deleteById(id)
- apaga um department pelo id solicitado via prompt.
Antes de executar é necessário ter o MySQL instalado e rodando na máquina. Execute o script para gerar e popular o banco de dados coursejdbc. Além disto, é necessário criar o arquivo db.properties na pasta raiz. Use o arquivo de exemplo db.properties.example, editando-o com suas informações de user e password de acesso ao seu MySQL, bem como a porta de conexão, que por padrão é a 3306.
O programa pode ser executado diretamente do console da IDE. Mas para isto é necessário baixar a biblioteca Connector/J e adicioná-la às bibliotecas de usuário no Eclipse.
Para executar diretamente no terminal, utilize o arquivo exportado do exercício demo-dao-jdbc.jar
da pasta exported. A biblioteca Connector/J do MySQL está incluída na exportação. Da pasta raiz do repositório clonado, execute:
java -cp exported/demo-dao-jdbc.jar application.Program
A figura a seguir mostra a um exemplo de execução do programa. Observe que o programa solicitará qual id deseja apagar em cada bateria de teste. Se houver algum department relacionado a algum seller não será possível apagá-lo, e o programa lançará um DbException.
Lembrando que é necessário ter o Java instalado na máquina na versão 11 ou superior e MySQL.
O exercício foi guiado por 26 videos-aulas do curso, cerca de 2h52m de gravações e atividades de desenvolvimento de aproximadamente 8h17m, entre os dias 5 e 6 de dezembro de 2022.
- Classe Department
- Classe Seller
- Interfaces DepartmentDao e SellerDao
- SellerDaoJDBC e DaoFactory
- Implementando findById
- Reutilizando a instanciação
- Implementando findByDepartment
- Implementando findAll
- Implementando insert
- Implementando update
- Implementando delete
- Implementação e teste do DepartmentDao