Skip to content

Jannabitte/DataTrackDAO

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DataTrackDAO - Módulo 5 Clase 11 AE-4

Descripción del proyecto

Este proyecto corresponde a la actividad AE-4 del Módulo 5, Clase 11, enfocada en la implementación de la capa de acceso a datos dentro de una aplicación web dinámica desarrollada en Java.

La actividad plantea el caso de la empresa ficticia DataTrack Solutions, una startup especializada en análisis de datos empresariales. En este contexto, se solicitó construir una aplicación web que permita gestionar información de clientes y transacciones, utilizando una base de datos MySQL y aplicando el patrón de diseño DAO.

El proyecto fue desarrollado desde cero en IntelliJ IDEA, utilizando Java, Maven, Apache Tomcat 11, JSP, JSTL, Servlets, JDBC y MySQL Workbench.

La finalidad principal fue comprender cómo una aplicación Java Web puede conectarse a una base de datos, separar responsabilidades mediante capas y mostrar los datos consultados en una página web dinámica.


Contexto de la actividad

La actividad solicitaba construir la capa de acceso a datos para una aplicación web dinámica de la empresa DataTrack Solutions.

El sistema debía permitir trabajar con dos elementos principales:

  • Clientes.
  • Transacciones asociadas a clientes.

Para cumplir con esto, se debía crear una base de datos, implementar la conexión desde Java, crear clases DTO, crear clases DAO, probar los métodos de acceso a datos desde un Servlet y mostrar los resultados en una página JSP utilizando JSTL.


Objetivo general

Implementar una aplicación web dinámica en Java que utilice JDBC, DAO y DTO para gestionar clientes y transacciones almacenados en una base de datos MySQL.


Objetivos específicos

Los objetivos desarrollados en este proyecto fueron:

  • Crear una base de datos llamada DataTrackDB.
  • Crear una tabla Clientes.
  • Crear una tabla Transacciones.
  • Relacionar las transacciones con los clientes mediante una llave foránea.
  • Implementar una clase ConexionDB para conectar Java con MySQL mediante JDBC.
  • Aplicar el patrón Singleton en la conexión a la base de datos.
  • Crear clases DTO para transportar datos entre capas.
  • Crear clases DAO para separar la lógica de acceso a datos.
  • Implementar operaciones CRUD para clientes.
  • Implementar operaciones de creación y consulta para transacciones.
  • Probar la implementación mediante un Servlet llamado TestDAO.
  • Mostrar los datos en una página JSP utilizando JSTL.
  • Agregar formularios para registrar clientes y transacciones desde la interfaz web.
  • Aplicar diseño básico responsivo.
  • Considerar buenas prácticas de seguridad y tratamiento responsable de datos.

Tecnologías utilizadas

Para desarrollar este proyecto se utilizaron las siguientes tecnologías y herramientas:

  • Java
  • Jakarta EE
  • Apache Tomcat 11
  • Maven
  • MySQL
  • MySQL Workbench
  • JDBC
  • Servlet
  • JSP
  • JSTL
  • HTML
  • CSS
  • IntelliJ IDEA
  • Git
  • GitHub

Estructura general del proyecto

La estructura principal del proyecto quedó organizada de la siguiente forma:

DataTrackDAO
│
├── src
│   └── main
│       ├── java
│       │   └── com.datatrack
│       │       ├── config
│       │       │   └── ConexionDB.java
│       │       │
│       │       ├── dao
│       │       │   ├── ClienteDAO.java
│       │       │   └── TransaccionesDAO.java
│       │       │
│       │       ├── dto
│       │       │   ├── ClienteDTO.java
│       │       │   └── TransaccionesDTO.java
│       │       │
│       │       └── servlet
│       │           └── TestDAO.java
│       │
│       └── webapp
│           ├── index.jsp
│           └── resultado.jsp
│
├── pom.xml
├── .gitignore
├── mvnw
└── mvnw.cmd

Organización por paquetes

El proyecto fue organizado en paquetes para separar responsabilidades.

Paquete config

Contiene la clase encargada de la conexión a la base de datos.

Paquete dto

Contiene las clases DTO, utilizadas para transportar datos entre las distintas capas del proyecto.

Paquete dao

Contiene las clases DAO, encargadas de realizar operaciones sobre la base de datos.

Paquete servlet

Contiene el Servlet principal de prueba.

Base de datos, contiene dos tablas principales:

     - Clientes
      -Transacciones

Tabla Clientes

La tabla Clientes almacena los datos básicos de cada cliente

Campos de la tabla Clientes
Campo	Tipo de dato	Descripción
id_cliente	INT	Identificador único del cliente. Es llave primaria y autoincremental.
nombre	VARCHAR(100)	Nombre del cliente.
email	VARCHAR(100)	Correo electrónico del cliente.
Tabla Transacciones

La tabla Transacciones almacena las transacciones asociadas a los clientes.

Campos de la tabla Transacciones
Campo	               Tipo de dato	        Descripción
id_transacciones	    INT	                Identificador único de la transacción. Es llave primaria y autoincremental.
id_cliente	          INT	                Identificador del cliente asociado a la transacción.
monto	                DECIMAL(10,2)	      Monto de la transacción.
fecha	                DATE	              Fecha de la transacción.

La tabla Transacciones se relaciona con la tabla Clientes mediante el campo id_cliente.

Relación entre tablas

La relación entre las tablas es la siguiente:
Un cliente puede tener muchas transacciones.
Cada transacción pertenece a un cliente existente.

Esta relación se implementó mediante una llave foránea.

Usuario de base de datos

Para evitar utilizar directamente el usuario root, se creó un usuario específico para este proyecto.
Este usuario tiene permisos limitados solamente sobre la base de datos DataTrackDB.

Los permisos asignados fueron:

SELECT
INSERT
UPDATE
DELETE

Esto permite que la aplicación pueda consultar, registrar, modificar y eliminar datos dentro de la base de datos del proyecto, sin afectar otras bases de datos.

Limpieza de datos de prueba

Durante las pruebas se generaron registros repetidos. Para limpiar la base de datos y reiniciar los identificadores
Se usa primero Transacciones y luego Clientes, ya que las transacciones dependen de los clientes por la llave foránea.
Configuración de Maven

El proyecto utiliza Maven para administrar dependencias y empaquetar la aplicación como archivo .war.

El archivo principal de configuración es:

pom.xml

En este archivo se configuraron las dependencias necesarias para trabajar con:

Servlets.
JSP.
JSTL.
MySQL Connector/J.
Empaquetado WAR.

Dependencias principales utilizadas
Servlet API

Permite trabajar con Servlets en Tomcat 11.
JSP API

Permite trabajar con páginas JSP
JSTL

Permite usar etiquetas como c:forEach, c:if, c:choose, entre otras
MySQL Connector/J

Permite conectar Java con MySQL mediante JDBC.

Conexión a la base de datos

La conexión se implementó en la clase:

ConexionDB.java

Ubicación:

src/main/java/com/datatrack/config/ConexionDB.java

Esta clase centraliza la conexión entre Java y MySQL utilizando JDBC.

También se aplicó el patrón Singleton, para mantener un único punto de acceso a la conexión y evitar crear conexiones innecesarias desde distintas partes de la aplicación.

Clase ConexionDB

La clase ConexionDB cumple las siguientes funciones:

Definir la URL de conexión.
Definir el usuario de base de datos.
Definir la contraseña del usuario.
Cargar el driver JDBC de MySQL.
Retornar una conexión activa.
Aplicar el patrón Singleton mediante un constructor privado y un atributo estático de conexión.

Esta clase permite que los DAO puedan obtener una conexión sin repetir código de conexión en cada clase.

Patrón Singleton

El patrón Singleton se aplicó en ConexionDB para centralizar la conexión a la base de datos.

Esto ayuda a:

Evitar duplicación de código.
Mantener un único punto de acceso a la conexión.
Mejorar la organización del proyecto.
Facilitar el mantenimiento del código.
Patrón DTO

DTO significa Data Transfer Object.

Los DTO permiten transportar datos entre capas sin incluir lógica de base de datos.

ClienteDTO

La clase ClienteDTO representa los datos de un cliente.

Esta clase incluye:

Constructor vacío.
Constructor con nombre y email.
Constructor con id, nombre y email.
Métodos getter y setter.

TransaccionesDTO

La clase TransaccionesDTO representa los datos de una transacción.

Esta clase incluye:

Constructor vacío.
Constructor para crear una transacción nueva.
Constructor para cargar una transacción desde la base de datos.
Métodos getter y setter.

Se utilizó BigDecimal para representar montos, ya que es una opción más adecuada para valores monetarios que double.

Se utilizó LocalDate para representar fechas de manera clara dentro de Java.

Patrón DAO

DAO significa Data Access Object.

El patrón DAO permite separar la lógica de acceso a datos del resto de la aplicación.

La idea principal es que el Servlet y las JSP no realicen consultas SQL directamente. Esa responsabilidad queda dentro de los DAO

Ventajas del patrón DAO

El uso del patrón DAO ayuda a:

Mantener el código más ordenado.
Separar la lógica de negocio de la lógica de base de datos.
Evitar repetir consultas SQL en distintas partes del proyecto.
Facilitar cambios futuros en la base de datos.
Mejorar la mantenibilidad del proyecto.
Hacer más clara la estructura por capas.
ClienteDAO

La clase ClienteDAO trabaja con la tabla Clientes

crearCliente

Permite insertar un nuevo cliente en la base de datos.

Utiliza una consulta SQL INSERT y recibe un objeto ClienteDTO.

actualizarCliente

Permite modificar el nombre y correo de un cliente existente.

Utiliza una consulta SQL UPDATE.

eliminarCliente

Permite eliminar un cliente según su identificador.

Utiliza una consulta SQL DELETE.

obtenerCliente

Permite buscar un cliente por su identificador.

Utiliza una consulta SQL SELECT.

listarClientes

Permite obtener todos los clientes registrados en la base de datos.

Este método fue agregado para mostrar la información en la página JSP.

TransaccionesDAO

La clase TransaccionesDAO trabaja con la tabla Transacciones.

crearTransaccion

Permite insertar una nueva transacción en la base de datos.

Recibe un objeto TransaccionesDTO.

obtenerTransaccionesPorCliente

Permite consultar las transacciones asociadas a un cliente específico.

listarTransacciones

Permite obtener todas las transacciones registradas.

Este método fue agregado para mostrar la información general en la página JSP.

Uso de PreparedStatement

En los DAO se utilizó PreparedStatement para ejecutar las consultas SQL.

Esto es importante porque:

Evita concatenar directamente datos ingresados por el usuario.
Reduce riesgos asociados a inyección SQL.
Permite enviar parámetros a las consultas de forma más segura y ordenada.
Mejora la legibilidad del código.

Servlet TestDAO
Este Servlet actúa como controlador principal de la aplicación.

Funciones del Servlet TestDAO

El Servlet TestDAO permite:

Ejecutar la prueba DAO.
Insertar datos iniciales si la tabla está vacía.
Consultar clientes desde la base de datos.
Consultar transacciones desde la base de datos.
Registrar clientes nuevos desde un formulario.
Registrar transacciones nuevas desde un formulario.
Enviar la información a la página resultado.jsp.

Métodos HTTP utilizados

El Servlet utiliza dos métodos principales:

doGet

Se utiliza para cargar la página y mostrar los datos registrados.

doPost

Se utiliza para recibir formularios enviados desde la página JSP.

El método doPost identifica qué acción se debe realizar mediante un campo oculto llamado accion.

Formularios implementados

En la página resultado.jsp se agregaron dos formularios:

Formulario para agregar cliente.
Formulario para agregar transacción.

index.jsp

La página index.jsp es la página inicial del proyecto.

Contiene:

Título del proyecto.
Breve descripción.
Botón para ejecutar la prueba DAO.

resultado.jsp

La página resultado.jsp es la vista principal donde se muestran los datos.

Contiene:

Mensaje de ejecución.
Formulario para agregar nuevo cliente.
Formulario para agregar nueva transacción.
Tabla de clientes registrados.
Tabla de transacciones registradas.
Sección de buenas prácticas aplicadas.

Uso de JSTL

En resultado.jsp se utilizó JSTL para mostrar los datos enviados desde el Servlet.

Funcionalidades implementadas

El proyecto permite realizar las siguientes acciones:

1. Visualizar clientes

Se muestran todos los clientes registrados en la tabla Clientes.

2. Visualizar transacciones

Se muestran todas las transacciones registradas en la tabla Transacciones.

3. Agregar cliente

El usuario puede registrar un nuevo cliente desde la página web.

Datos solicitados:

Nombre.
Email.
4. Agregar transacción

El usuario puede registrar una nueva transacción para un cliente existente.

Datos solicitados:

Cliente.
Monto.
Fecha.
5. Cargar datos iniciales

Si la tabla de clientes está vacía, el sistema carga clientes y transacciones de prueba.

6. Mostrar mensajes de resultado

La página muestra mensajes como:

Cliente registrado correctamente.
Transacción registrada correctamente.
Error al procesar la solicitud, si ocurre un problema.
Validaciones aplicadas

En el Servlet se agregaron validaciones básicas.

Para clientes:

El nombre no puede estar vacío.
El email no puede estar vacío.

Para transacciones:

Debe seleccionarse un cliente.
El monto no puede estar vacío.
La fecha no puede estar vacía.
El monto debe ser mayor a cero.
Diseño visual

Se agregó CSS directamente en las páginas JSP para mejorar la presentación visual.

El diseño incluye:

Encabezado principal.
Fondo claro.
Tarjetas para separar secciones.
Tablas ordenadas.
Botones visibles.
Formularios simples.
Campos de texto estilizados.
Diseño responsivo básico.
Responsividad

Se incluyeron media queries para mejorar la visualización en pantallas más pequeñas.

Buenas prácticas aplicadas

Durante el desarrollo del proyecto se aplicaron buenas prácticas básicas:

Separación del proyecto en paquetes.
Uso de patrón DAO.
Uso de patrón DTO.
Uso de clase de conexión centralizada.
Uso de patrón Singleton en la conexión.
Uso de PreparedStatement.
Uso de Maven para dependencias.
Uso de Tomcat para ejecutar la aplicación web.
Uso de JSP y JSTL para mostrar datos.
Uso de formularios para insertar datos.
Validación básica de entradas.
Creación de usuario de base de datos específico para el proyecto.
Permisos limitados para el usuario de base de datos.
Uso de .gitignore para evitar subir archivos innecesarios.
Organización del código para facilitar mantenimiento.
Consideraciones sobre seguridad

El proyecto trabaja con datos básicos como nombre, correo y transacciones.

Aunque es un proyecto académico, se aplicaron medidas básicas de seguridad:

No se usa directamente el usuario root desde Java.
Se creó un usuario específico para la aplicación.
El usuario tiene permisos limitados sobre una sola base de datos.
Se utiliza PreparedStatement para evitar concatenar datos directamente en SQL.
Se validan campos antes de insertar información.
No se solicitan datos sensibles innecesarios.
Consideraciones sobre cumplimiento legal en Chile

El proyecto considera buenas prácticas relacionadas con el tratamiento responsable de datos personales, ya que se trabaja con información como nombres y correos electrónicos.

Aunque se trata de una aplicación académica y con datos de prueba, se procuró:

Solicitar solo datos necesarios para el funcionamiento del sistema.
Evitar el uso de datos sensibles.
Utilizar un acceso controlado a la base de datos.
Aplicar medidas básicas de seguridad en consultas SQL.
Mantener una estructura clara que facilite futuras mejoras de seguridad.

En un sistema real, sería necesario complementar este trabajo con políticas de privacidad, control de acceso, registro de consentimiento, gestión de usuarios, auditoría y medidas adicionales de protección de datos.

Cómo ejecutar el proyecto
Requisitos previos

Para ejecutar el proyecto se necesita tener instalado:

Java.
IntelliJ IDEA.
Apache Tomcat 11.
MySQL Server.
MySQL Workbench.
Maven.

Aprendizaje obtenido

Con este proyecto reforcé el uso de la capa de acceso a datos en una aplicación Java Web.

Aprendí a conectar una aplicación Java con una base de datos MySQL utilizando JDBC, organizar el código mediante DAO y DTO, trabajar con Servlets, mostrar información en JSP utilizando JSTL y ejecutar el proyecto con Tomcat.

También pude comprender mejor la importancia de separar responsabilidades dentro de una aplicación. La conexión queda en una clase específica, las consultas SQL quedan dentro de los DAO, los datos se transportan mediante DTO, el Servlet coordina la lógica y la JSP se encarga de mostrar la información al usuario.

Además, durante el desarrollo resolví errores reales de configuración y conexión, lo que permitió comprender mejor cómo se relacionan IntelliJ IDEA, Tomcat, MySQL Workbench y el código Java.

Reflexión sobre el patrón DAO

El uso del patrón DAO mejora la organización del proyecto porque permite separar la lógica de acceso a datos del resto de la aplicación.

En lugar de escribir consultas SQL directamente en el Servlet o en la JSP, estas consultas quedan en clases específicas como ClienteDAO y TransaccionesDAO.

Esto hace que el proyecto sea más fácil de mantener, porque si en el futuro cambia la estructura de la base de datos o se necesita modificar una consulta, se puede hacer desde el DAO sin afectar directamente la vista o el Servlet.

Reflexión sobre el patrón DTO

El patrón DTO resultó útil porque permite transportar datos de forma ordenada entre las capas del proyecto.

Por ejemplo, un cliente se representa mediante ClienteDTO, que contiene su id, nombre y email. Una transacción se representa mediante TransaccionesDTO, que contiene su id, cliente asociado, monto y fecha.

Esto evita trabajar con datos sueltos en muchas partes del proyecto y permite que el código sea más claro.

Reflexión sobre la separación de capas

Separar la aplicación en capas ayuda a mantener una estructura más ordenada.

En este proyecto se identifican claramente las siguientes responsabilidades:

ConexionDB: conexión a la base de datos.
DTO: transporte de datos.
DAO: operaciones con la base de datos.
Servlet: control de solicitudes.
JSP: presentación visual de los datos.

Esta separación permite que cada parte tenga una responsabilidad específica y que el proyecto sea más fácil de entender y mejorar.

Observación personal sobre el desarrollo

Este proyecto fue desarrollado de manera individual, siguiendo las instrucciones de la actividad AE-4 del Módulo 5, Clase 11.

Mi principal forma de comunicación con los profesores es la escritura, por lo que este README fue elaborado de manera detallada para explicar claramente qué se hizo, cómo se organizó el proyecto, qué tecnologías se utilizaron, cómo se creó la base de datos, cómo se ejecuta la aplicación y qué aprendizajes se obtuvieron.

La intención de este documento es que el proyecto pueda ser comprendido al revisar el repositorio, incluso sin una explicación verbal adicional.

Estado actual del proyecto

El proyecto se encuentra funcional.

Actualmente permite:

Conectarse a MySQL.
Crear clientes.
Crear transacciones.
Listar clientes.
Listar transacciones.
Mostrar datos en JSP usando JSTL.
Ejecutarse en Tomcat 11.
Registrar datos desde formularios web.
Mantener una estructura organizada por capas.
Autoría

Trabajo desarrollado de forma individual para el Módulo 5, Clase 11, Actividad AE-4.

Proyecto académico orientado a la implementación de la capa de acceso a datos en una aplicación web dinámica Java.

About

Aplicación web dinámica desarrollada en Java para el Módulo 5, Clase 11, enfocada en la implementación de la capa de acceso a datos mediante JDBC, DAO y DTO. El proyecto permite gestionar clientes y transacciones usando MySQL, Servlet, JSP y JSTL, aplicando buenas prácticas de organización, separación de capas y manejo básico de datos.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages