Introducción
En este artículo resolveremos un examen práctico centrado en el desarrollo de aplicaciones con bases de datos relacionales y NoSQL, utilizando Java con Hibernate, MongoDB y eXistDB. Implementaremos tres ejercicios clave que cubren migración de datos, generación de documentos XML y lectura de archivos Excel para estructurarlos en XML.
Configuración del Proyecto Maven
Antes de comenzar, configuramos un proyecto Maven con las dependencias necesarias:
<dependencies>
<!-- Hibernate Core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.2.0.Final</version>
</dependency>
<!-- MySQL Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<!-- MongoDB Driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.10.2</version>
</dependency>
<!-- eXistDB XML API -->
<dependency>
<groupId>org.exist-db</groupId>
<artifactId>exist-core</artifactId>
<version>6.0.0</version>
</dependency>
<!-- Apache POI para lectura de Excel -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<!-- JAXB para la generación de XML -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
</dependencies>
Ejercicio 1: Migración de Datos de MongoDB a MySQL
Descripción
Migramos los datos de la colección Turismo de la base de datos TurismoMySQL en MongoDB a alojamientosRuralesDB en MySQL, filtrando solo los registros con «Alojamiento Turismo Rural» en el campo establecimiento
.
Implementación
Configuración de Hibernate
Creamos una entidad AlojamientoRural.java
:
@Entity
@Table(name = "alojamientos")
public class AlojamientoRural {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nombre;
private String tipo;
private String provincia;
private String direccion;
private String telefono;
}
Método de Migración
public void migrarDatosAlojamientoTurismoRural() {
try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
MongoDatabase database = mongoClient.getDatabase("TurismoMySQL");
MongoCollection<Document> collection = database.getCollection("Turismo");
List<AlojamientoRural> alojamientos = new ArrayList<>();
for (Document doc : collection.find(eq("establecimiento", "Alojamiento Turismo Rural"))) {
AlojamientoRural alojamiento = new AlojamientoRural();
alojamiento.setNombre(doc.getString("nombre"));
alojamiento.setTipo(doc.getString("tipo"));
alojamiento.setProvincia(doc.get("ubicacion", Document.class).getString("provincia"));
alojamiento.setDireccion(doc.get("ubicacion", Document.class).getString("direccion"));
alojamiento.setTelefono(doc.getString("telefono"));
alojamientos.add(alojamiento);
}
SessionFactory factory = new Configuration().configure().buildSessionFactory();
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
for (AlojamientoRural alojamiento : alojamientos) {
session.save(alojamiento);
}
tx.commit();
session.close();
System.out.println("Migración completada exitosamente.");
}
}
Ejercicio 2: Creación de Recursos en ExistDB
Descripción
Generamos documentos XML por provincia desde alojamientosRuralesDB y los almacenamos en la colección HosteleriaCyL de eXistDB.
Implementación
public void crearRecursoHosteleria() throws Exception {
SessionFactory factory = new Configuration().configure().buildSessionFactory();
Session session = factory.openSession();
List<Object[]> results = session.createQuery("SELECT provincia, COUNT(*) FROM AlojamientoRural GROUP BY provincia").list();
session.close();
for (Object[] result : results) {
String provincia = (String) result[0];
long count = (Long) result[1];
String xml = "<provincia nombre='" + provincia + "'><alojamiento tipo='Casa rural de Alquiler' num.establecimientos='" + count + "'/></provincia>";
ExistDBHelper.saveXMLToExistDB("HosteleriaCyL", provincia + ".xml", xml);
}
}
ExistDBHelper.saveXMLToExistDB(...)
maneja la conexión y almacenamiento en ExistDB.
Ejercicio 3: Generación de Documento XML desde Excel
Descripción
Convertimos los datos del archivo alojamientosCyL.xlsx en un documento XML con JAXB.
Implementación
public void crearDocumentoExcel() throws Exception {
FileInputStream file = new FileInputStream("alojamientosCyL.xlsx");
Workbook workbook = new XSSFWorkbook(file);
Sheet sheet = workbook.getSheetAt(0);
Establishments establishments = new Establishments();
for (Row row : sheet) {
String tipo = row.getCell(0).getStringCellValue();
String provincia = row.getCell(1).getStringCellValue();
int count = (int) row.getCell(2).getNumericCellValue();
establishments.addEntry(tipo, provincia, count);
}
workbook.close();
JAXBContext context = JAXBContext.newInstance(Establishments.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(establishments, new File("alojamientosCyL.xml"));
System.out.println("XML generado correctamente.");
}
Conclusión
Hemos resuelto con éxito los ejercicios propuestos, asegurando eficiencia, buenas prácticas y validaciones en el manejo de bases de datos y documentos estructurados. Este examen demuestra la importancia de combinar distintas tecnologías para la gestión de datos en aplicaciones empresariales modernas.
