Proyecto de migración de base de datos relacional (MySQL) a una base de datos orientada a objetos (Neodatis).
Este repositorio contiene un proyecto de Java que realiza las siguientes acciones:
- Conecta con la base de datos relacional
BDrel_clases
en MySQL. - Crea una nueva base de datos orientada a objetos
FitnessClub.neo
usando Neodatis. - Migra los datos de las tablas (clases, gimnasios y monitores) de la base de datos relacional a la nueva base de datos.
- Realiza consultas de validación y prueba en la base de datos orientada a objetos.
La empresa BDConsulting requiere automatizar la migración de una base de datos MySQL que gestiona información de una cadena de gimnasios (FitnessClub) a una nueva base de datos orientada a objetos en Neodatis.
El propósito de este proyecto es:
- Practicar la conexión a MySQL desde Java.
- Aprender a utilizar la API de Neodatis para la persistencia de objetos.
- Realizar migraciones y comprobaciones de datos en un entorno de prueba.
La base de datos relacional se encuentra en MySQL y consta de cuatro tablas principales:
- Gimnasios
- Monitores
- Clases
- ClasMon (tabla intermedia para relacionar monitores y clases)
Para crear la base de datos original, se incluye el script BDrel_clases.sql
.
Las clases Java que modelan la base de datos Neodatis son:
-
Gimnasios
Integer cod_centro; String nombre; Monitores responsable; String direccion; String localidad; String provincia; Set<Monitores> setMonitores;
-
Monitores
Integer cod_monitor; String nombre; String apellido; Date fecha_nac; String sexo; Gimnasios gimnasio;
-
Clases
Integer cod_clase; String nombre; String dificultad; Integer durac_min; Set<Monitores> setMonitores;
Estas clases contienen las relaciones necesarias para que Neodatis gestione la persistencia de manera orientada a objetos.
- Java 8 o superior
- Driver JDBC para MySQL (por ejemplo,
mysql-connector-java-8.0.x.jar
). - Neodatis (librería .jar para la persistencia orientada a objetos).
- MySQL instalado y configurado, o acceso a un servidor MySQL remoto.
-
Clona este repositorio:
git clone https://github.com/RGiskard7/neodatis-migration-example.git
-
Importa el proyecto en tu IDE (Eclipse, IntelliJ, NetBeans, etc.) o configúralo con tu herramienta de compilación preferida (Maven, Gradle, etc.).
-
Descarga las librerías necesarias:
-
Incluye las librerías en tu ruta de clase (classpath) o en el
pom.xml
/build.gradle
si usas un gestor de dependencias. -
Configura tu archivo de propiedades o variables de entorno para apuntar a la base de datos MySQL:
db.url=jdbc:mysql://localhost:3306/BDrel_clases db.user=root db.password=1234
- Ejecuta el script
BDrel_clases.sql
en tu servidor MySQL para crear la base de datos relacional y poblarla con datos de prueba. - Inicia la aplicación Java:
- Se conectará a la base de datos MySQL usando la configuración proporcionada.
- Creará el archivo
FitnessClub.neo
(base de datos orientada a objetos de Neodatis). - Migrará los datos de las tablas
Gimnasios
,Monitores
yClases
. - Configurará los sets de monitores en cada gimnasio y en cada clase.
- Verifica la migración:
- El proyecto incluye varias consultas (parte II de la práctica) para comprobar que los datos se han migrado correctamente.
El programa ofrece distintas consultas para validar y probar la base de datos orientada a objetos, por ejemplo:
- Mostrar gimnasios por provincia con su responsable y monitores.
- Calcular la media de duración de las clases para un nivel de dificultad.
- Listar monitores que cumplan ciertas condiciones (p.ej. mujeres con nombre que no acabe en "A").
- Sumar la duración de las clases impartidas por cada monitor.
- Contar los centros por provincia.
- Inserción de Clases: primero se insertan los objetos de la tabla
Clases
sin los sets de monitores. - Inserción de Gimnasios: se insertan los objetos de la tabla
Gimnasios
sin los sets de monitores y sin el responsable. - Inserción de Monitores: se insertan los objetos de la tabla
Monitores
. - Actualización de Relaciones: una vez creados monitores, se actualizan los
Set<Monitores>
enGimnasios
yClases
, y se asigna elresponsable
del gimnasio.
Se incluyen métodos de comprobación para evitar duplicados antes de insertar.
src/
├── com.example.practica4ad/
│ ├── Sistema.java # Clase principal, gestión de menús y punto de entrada
│ │
│ ├── datos/
│ │ ├── MySQLBD.java # Singleton para gestión de conexiones MySQL
│ │ │
│ │ └── modelos/ # Clases de entidad
│ │ ├── Clases.java # Modelo para actividades deportivas
│ │ ├── Gimnasios.java # Modelo para centros deportivos
│ │ └── Monitores.java # Modelo para instructores
│ │
│ ├── servicios/
│ │ ├── ConsultasBD.java # Implementación de consultas Neodatis
│ │ │ # - Consultas por provincia
│ │ │ # - Estadísticas de duración
│ │ │ # - Filtros de monitores
│ │ │ # - Análisis de clases
│ │ │
│ │ └── MigracionBD.java # Gestión de migración MySQL → Neodatis
│ │ # - Migración de datos básicos
│ │ # - Actualización de relaciones
│ │ # - Validación de integridad
│ │
│ └── util/
│ └── Util.java # Utilidades de formato y mensajes
│ # - Códigos ANSI para colores
│ # - Mensajes de error/éxito
│
└── resources/ # Recursos del proyecto
└── BDrel_clases.sql # Script de creación de BD MySQL
- Autor: Eduardo Díaz Sánchez
- Asignatura: Acceso a Datos, DAM
- Centro Educativo: IES Calderón de la Barca (Pinto)
Este proyecto se distribuye bajo la licencia MIT.