Saltar a contenido

🧭 Estructura de un proyecto 2 con JDBC

Introducción

Vamos a ver un segundo ejemplo con un mantenimiento más complejo en el que tenemos dos tablas relacionada. El objetivo será crear el mantenimiento de la siguiente base de datos en MySql

alt text

Un trabajador pertenece a un departamento y un departamento tiene un Jefe. Permitiremos que un trabajador no tenga departamento y que un departamento no tenga jefe dejando que puedan ser nulos dichos campos de ambas tablas.

La relación entre ambas tablas es:

  • Un departamento tiene muchos empleados.
  • Un empleado pertenece a un departamento.
  • Un departamento puede tener un jefe, que también es un empleado.

Nota

En muchas ocasiones, para evitar trabajar con nulos, se decide crear una tupla general que represente la no pertenencia. Por ejemplo: Se crea la tupla en Departamento “Sin departamento”, y en trabajadores una persona llamada: “Sin Jefe

La aplicación permitirá acceder al mantenimiento de Empleados y Departamentos permitiendo filtrar la información para facilitar al usuario encontrar los datos que necesite y mostrará listados importantes sobre los datos.

Resultado final

Tenemos el código final en el repositorio

Proyecto MVC_Consola

La aplicación tiene dos mantenimientos principales que son los departamentos y los trabajadores. Para ello, la aplicación comienza en un menú principal que nos permita acceder a dichos mantenimientos.

alt text

Objetivos de la aplicación

Los objetivos principales del proyecto son:

  • Aplicar el patrón MVC en una aplicación de consola.
  • Conectar Java con una base de datos relacional mediante JDBC.
  • Gestionar departamentos y empleados con operaciones CRUD.
  • Implementar consultas y listados útiles para el usuario.
  • Organizar el código de forma modular y mantenible.

Requisitos funcionales

La aplicación debe permitir:

  • Dar de alta departamentos.
  • Dar de baja departamentos.
  • Modificar departamentos.
  • Cambiar el jefe de un departamento.
  • Dar de alta empleados.
  • Dar de baja empleados.
  • Modificar empleados.
  • Listar todos los departamentos.
  • Listar los empleados de un departamento.
  • Mostrar el total de empleados por departamento.
  • Buscar empleados por nombre.
  • Buscar empleados por DNI.
  • Listar todos los empleados ordenados alfabéticamente.
  • Listar todos los empleados ordenados por edad. Cada uno de los menús nos permiten realizar el CRUD de cada tabla. Tenemos la posibilidad de ver listados interesantes de Departamentos y de Trabajadores.

Tecnologías utilizadas

Para desarrollar la aplicación se han utilizado las siguientes tecnologías:

  • Java
  • IntelliJ IDEA
  • JDBC
  • MySQL o MariaDB
  • Markdown para la documentación

Estructura del proyecto

El proyecto se organiza en varios paquetes siguiendo el patrón MVC:

  • app: contiene la clase principal Main.
  • model: contiene las clases de dominio como Departamento y Empleado.
  • model: contiene clases auxiliares como DepartamentoResumen.
  • db: contiene la conexión y los DAO.
  • view: contiene las clases encargadas de mostrar menús y listados en consola.
  • controller: contiene la lógica que coordina la vista con el acceso a datos.

alt text

src
├── app
│   └── Main.java
├── controller
│   ├── AppController.java
│   ├── DepartamentoController.java
│   └── EmpleadoController.java
├── db
│   ├── DBConnection.java
│   ├── DepartamentoDAO.java
│   └── EmpleadoDAO.java
├── model
│   ├── Departamento.java
│   ├── Empleado.java
│   └── DepartamentoResumen.java
└── view
    ├── Consola.java
    ├── DepartamentoView.java
    └── EmpleadoView.java

Agregar jdbc de MySql al proyecto

Es necesario agregarlo el jdbc de MySql/MariaDB. Podemos hacerlo con: - Maven(no me a funcionado con esta versión de IntelliJ). - Directamente. Vamos a usar la segunda opción.

Descargamos el fichero de

mysql-connector-j-x.x.x.zip

descarga directa mysql-connector-j-9.6.0.zip

Lo descomprimimos y vamos a agregar el fichero mysql-connector-j-9.6.0.jar al proyecto.

Copiar el fichero al proyecto:

alt text

Agregamos la librería para su uso(buscar el fichero en la ruta del proyecto):

alt text

alt text

Patrón MVC aplicado al proyecto

El patrón MVC divide la aplicación en tres partes:

  • Modelo Incluye las clases Departamento, Empleado, DepartamentoResumen y los DAO.
    Su función es representar los datos y acceder a la base de datos.

  • Vista Incluye las clases Consola, DepartamentoView y EmpleadoView.
    Se encarga de mostrar menús, mensajes y listados al usuario.

  • Controlador Incluye AppController, DepartamentoController y EmpleadoController.
    Recibe las acciones del usuario, llama a los DAO y envía los resultados a la vista.

Implementación paso a paso

1-Base de datos en MariaDB/MySql

Es necesario crear la base de datos en el gestor seleccionado. Suponemos que está creada la base de datos y la llamamos empresaDB.

Para crear la base de datos, entrar en MySQL y crear la base de datos

CREATE DATABASE empresadb;
Lo normal es que el esquema de la base de datos se encuentre creada, pero en nuestro caso, lo creamos desde programa.

2-Crear la conexión a la base de datos

La clase DBConnection permite gestionar la conexión con la base de datos mediante JDBC. Implementa el patrón Singleton para evitar más de una instancia de la clase.

DBConnection.java

Esta clase centraliza: - la URL de conexión - el usuario y contraseña - la apertura de la conexión - el cierre de la conexión - la creación inicial de tablas y datos de ejemplo

3-Crear las clases del modelo

Las clases Departamento y Empleado representan las entidades principales del sistema. Estas clases permiten definir los objetos POJO que contienen la información extraída de la base de datos.

Por otro lado, vamos a mostrar un listado de departamentos con los totales de empleados, para ello hemos creado una clase DepartamentoResumen que permite definir los objetos POJO con dicha información extraída de la base de datos para mostrarla

alt text

Clases del Modelo

alt text

Estas clases incluyen: - constantes para centralizar el formato para la impresión tabulada de listados - atributos privados - constructores - getters y setters - método toString(), que muestra la información tabulada

4-Implementar los DAO

El patrón DAO nos permite aislar el acceso a los datos de la aplicación, conviertiendo las tublas de la base de datos en objeto Java(POJO) y viceversa.

Se crearon dos clases DAO:

Estas clases encapsulan todas las operaciones de acceso a datos, como inserciones, borrados, modificaciones y consultas. Se implementan bajo el patrón Singleton para evitar más de una instancia.

Operaciones implementadas en DepartamentoDAO

Estas operaciones reciben/devuelve un objeto/lista_objetos de Departamentos - crear departamento - borrar departamento - modificar departamento - obtener departamento por código - listar departamentos - obtener total de empleados por departamento: Nos permite recuperar el total de empleados por departamento como una lista de objetos de tipo DepartamentoResumen

Por otro lado, disponemos de métodos de utilidad: - resultSetToDepartamento: que nos permiten crear el objeto Departamento a partir de la posición actual del ResultSet - updateJefeDepartamento: Para actualizar el jefe de un departamento

Operaciones implementadas en EmpleadoDAO

De forma muy parecida tenemos las operaciones CRUD de Empleado EmpleadoDAO.java - crear empleado - borrar empleado - modificar empleado - obtener empleado por id - listar empleados por departamento - buscar por nombre - buscar por dni - listar todos ordenados alfabéticamente - listar todos ordenados por edad

5- Crear las vistas de consola(view)

Para la interacción con el usuario, en el paquete view se crearon clases de vista para consola.

Estas vistas muestran: - menús - tablas con resultados - mensajes de confirmación y error - pausas para volver al menú tras mostrar un listado

Cada mantenimiento tiene su clase View y por otro lado tenemos la clase Consola que contiene utilidades(leer número, borrar pantalla, leer si/no...)

6 Crear los controladores

Los controladores gestionan el flujo de la aplicación y hacen de intermediario entre los datos y las acciones del usuario

mvc

Los controladores mantienen instancias de sus respectivos DAO y View para controlar la aplicación y tomarán las decisiones en función de la elección del menú de usuario.

Cada controlador recoge datos desde la vista, llama a los DAO y devuelve los resultados a la vista para su presentación.

7 Crear la clase Main

Finalmente se creó la clase Main, que actúa como punto de entrada de la aplicación.

Esta clase:

  1. inicializa el controlador principal