Aplicación de consola en Java que implementa un sistema de gestión de empleados y sus legajos utilizando arquitectura en capas, JDBC y MySQL, desarrollada como Trabajo Práctico Integrador de Programación 2 (UTN).
Este proyecto implementa un sistema de consola en Java para la gestión de:
- Empleado (
Employee): persona que trabaja en la organización. - Legajo (
EmployeeFile): ficha administrativa asociada a un empleado.
La relación entre ambas entidades es 1 a 1 unidireccional:
- Un Empleado puede tener como máximo un Legajo.
- Cada Legajo pertenece a un único Empleado.
- En código,
Employeetiene una referencia aEmployeeFile. - En la BD, la tabla de legajos (
employee_files) tiene una FK única aemployees(id)conON DELETE CASCADE.
Además, se aplica baja lógica (soft delete) mediante un campo booleano deleted/eliminated en ambas entidades, evitando eliminar físicamente los registros y permitiendo trazabilidad histórica.
- Gaston Lell
- Adriel Lopez
- Juan Cruz Leal
- Gabriel Lovera
El proyecto permite practicar y demostrar:
- Arquitectura en capas (Layered Architecture) con separación en:
- Capa de Presentación (consola,
Main/AppMenu). - Capa de Servicio (lógica de negocio, validaciones).
- Capa DAO (acceso a datos con JDBC).
- Capa de Entidades (modelo de dominio).
- Capa de Presentación (consola,
- Programación Orientada a Objetos (POO):
- Uso de una clase base abstracta (
BaseEntity). - Interfaces genéricas (
GenericDao,GenericService). - Encapsulamiento y sobrescritura de métodos (
toString,equals,hashCode).
- Uso de una clase base abstracta (
- Persistencia con JDBC:
- Conexión a MySQL.
- Patrón DAO.
- Uso de
PreparedStatementpara prevenir SQL Injection. - Manejo de transacciones (
commit/rollback).
- Manejo de excepciones y recursos:
try-with-resources.TransactionManagercomoAutoCloseable.
- Lenguaje: Java (recomendado JDK 21 o superior).
- Base de datos: MySQL 8.x.
- Persistencia: JDBC puro (sin ORM).
- Patrones de diseño:
- DAO Pattern.
- Service Layer.
- Soft Delete.
- Factory para la conexión (e.g.
DatabaseConnection).
- Interfaz de usuario: Menú por consola.
config/
Manejo de la conexión a la BD (DatabaseConnection, lectura de propiedades).entities/
Modelo de dominio:Employee,EmployeeFile,BaseEntity.dao/
Interfaces genéricas e implementaciones JDBC concretas.service/
Lógica de negocio, validaciones, orquestación de transacciones.main/
Punto de entrada (Main) y menú de consola (AppMenu).
Atributos principales:
id(heredado deBaseEntity).firstName.lastName.legalId(DNI / identificador legal, único).email.hireDate.area.deleted / eliminated(baja lógica).- Referencia opcional a
EmployeeFile.
Atributos principales:
id(heredado deBaseEntity).fileNumber(número de legajo, único).category.status.dateCreated.observation.deleted / eliminated(baja lógica).employeeId(FK haciaemployees.id).
En lugar de eliminar registros físicamente, se utiliza un campo booleano (deleted/eliminated) para marcar la baja:
- Las consultas “normales” filtran por
deleted = FALSE. - Se mantiene el historial y la trazabilidad de los datos.
| Componente | Requerido |
|---|---|
| Java JDK | 21 o superior |
| MySQL | 8.0 o superior |
| SO | Windows / Linux / macOS |
| IDE recomendado | IntelliJ IDEA, NetBeans o Eclipse |
| Cliente SQL | Workbench / DBeaver / consola |
git clone <URL_DEL_REPO>
cd <carpeta_del_repo>Reemplazá
<URL_DEL_REPO>y<carpeta_del_repo>según tu proyecto real.
- Asegurate de tener un servidor MySQL 8.x en ejecución.
- Crear la base de datos y usuario (si corresponde).
Por ejemplo:
CREATE DATABASE dbtpi3 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'tpi_user'@'localhost' IDENTIFIED BY 'tpi_password';
GRANT ALL PRIVILEGES ON dbtpi3.* TO 'tpi_user'@'localhost';
FLUSH PRIVILEGES;Podés usar el usuario
rootsi lo preferís, ajustando luego el archivo de configuración.
En la carpeta sql/ del proyecto se incluye un script de inicialización (por ejemplo init.sql) con la creación de tablas y restricciones necesarias.
En tu cliente SQL (Workbench, DBeaver o consola):
SOURCE /ruta/al/proyecto/sql/init.sql;Ajustá la ruta al archivo según la ubicación real en tu equipo.
El proyecto utiliza una clase DatabaseConnection (en config/) que lee un archivo de propiedades externo, por ejemplo config/database.properties.
Ejemplo de database.properties:
db.url=jdbc:mysql://localhost:3306/dbtpi3
db.user=tpi_user
db.password=tpi_password
db.useSSL=false
db.serverTimezone=UTCPodés cambiar
dbtpi3, usuario y contraseña según tu entorno.
- Abrir el proyecto en tu IDE (IntelliJ, NetBeans, Eclipse).
- Esperar a que se resuelvan las dependencias.
- Compilar el proyecto desde el menú Build.
Si el proyecto usa Gradle/Maven, ejecutá el comando correspondiente (./gradlew build o mvn clean package).
Si está configurado como proyecto simple, compilá las clases desde el IDE o usando javac.
- Configurá la clase de arranque (por ejemplo
Main.Main). - Ejecutá el proyecto desde el botón de Run.
Suponiendo:
- Clases compiladas en
build/classes/java/main. - Ruta al conector MySQL:
<ruta-mysql-jar>.
Windows:
java -cp "build\classes\java\main;<ruta-mysql-jar>" Main.MainLinux/macOS:
java -cp "build/classes/java/main:<ruta-mysql-jar>" Main.MainSi existe una clase de prueba de conexión (por ejemplo Main.TestConexion), podés ejecutarla para comprobar:
java -cp "build/classes/java/main:<ruta-mysql-jar>" Main.TestConexionAl iniciar la aplicación se muestra un menú interactivo en consola, con opciones del estilo:
========= MENU =========
1. Crear empleado
2. Listar empleados
3. Actualizar empleado
4. Eliminar empleado (baja lógica)
5. Crear legajo
6. Listar legajos
7. Actualizar legajo
8. Eliminar legajo (baja lógica)
0. Salir
Características principales:
- Validaciones de entrada (tipos de datos y campos obligatorios).
- Mensajes claros de éxito y error.
- Manejo de baja lógica para mantener historial.
- La aplicación no se detiene ante errores de entrada: informa el problema y permite reintentar.
La capa de servicio se encarga de:
- Validar unicidad de:
legalIdparaEmployee.fileNumberparaEmployeeFile.
- Mantener la relación 1 → 1 entre Empleado y Legajo.
- Manejar transacciones:
setAutoCommit(false).commit()si todo se ejecuta correctamente.rollback()ante cualquier error.
Operaciones típicamente transaccionales:
- Crear Empleado + Legajo en una sola operación.
- Eliminar Empleado y su Legajo asociado.
- Actualizar datos asegurando integridad referencial.