commit 146d48dda65493011345a2d245af38150144bd50 Author: Isidoro Nevares Martín Date: Fri Dec 12 14:00:07 2025 +0100 commit inicial diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..d863192 --- /dev/null +++ b/.classpath @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9f1d3ca --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target/ +*.class \ No newline at end of file diff --git a/.project b/.project new file mode 100644 index 0000000..77d4cc0 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + aadd_act3_4 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..bfac099 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,13 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=24 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=24 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=24 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..1b636a1 --- /dev/null +++ b/pom.xml @@ -0,0 +1,27 @@ + + 4.0.0 + aadd_act2_3 + aadd_act2_3 + 0.0.1-SNAPSHOT + + + + org.hibernate.orm + hibernate-core + 7.1.11.Final + + + + com.mysql + mysql-connector-j + 9.0.0 + + + + net.bytebuddy + byte-buddy + 1.15.11 + + + + \ No newline at end of file diff --git a/src/main/java/es/palomafp/aadd/inm/GestorMapaMundi.java b/src/main/java/es/palomafp/aadd/inm/GestorMapaMundi.java new file mode 100644 index 0000000..f6f9a57 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/GestorMapaMundi.java @@ -0,0 +1,103 @@ +package es.palomafp.aadd.inm; + +import java.util.List; +import java.util.Scanner; + +import es.palomafp.aadd.inm.dao.IContinenteDAO; +import es.palomafp.aadd.inm.dao.IPaisDAO; +import es.palomafp.aadd.inm.dao.hbm.ContinenteDaoHibernate; +import es.palomafp.aadd.inm.dao.hbm.PaisDaoHibernate; +import es.palomafp.aadd.inm.vo.Continente; +import es.palomafp.aadd.inm.vo.Pais; + +/** + * + * GestorMapaMundi: Clase que accede a información de la BBDD MapaMundi. + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 26 sept 2025 + */ + +public class GestorMapaMundi { + + public static void main(String[] args) { + GestorMapaMundi gestor = new GestorMapaMundi(); + + Scanner scanner = new Scanner(System.in); // Crear el scanner + + System.out.println("Introduce una opción de procesamiento sobre Mapa Mundi."); + System.out.println("Opción 1: Consultar países del continente americao que empiezan por Sa"); + System.out.println("Opción 2: Añadir nuevo continente."); + System.out.println("Opción 3: Actualizar el país con código 107. capital -> Capital City."); + System.out.println("Opción 4: Eliminar el continente con código 02."); + String opcion = scanner.nextLine(); // Leer una opción introducida. + + switch (opcion) { + case "1": + System.out.println("Opción 1: Consultar países del continente americano que empiezan por Sa"); + List listaPaises = gestor.consultarPaisesAmericanosEmpiezanSa(); + for (Pais pais : listaPaises) { + String infoPais = "%s (%d) pertenece al continente %s (%s)"; + infoPais = String.format(infoPais, pais.getNombrePais(), pais.getIdentificador(), + pais.getContinente().getNombreContinente(), pais.getContinente().getCodigo()); + + System.out.println(infoPais); + } + break; + case "2": + System.out.println("Opción 2: Añadir nuevo continente."); + Continente continente = new Continente(); + continente.setCodigo("06"); + continente.setNombreContinente("Antártida"); + gestor.anyadirContinente(continente); + break; + case "3": + System.out.println("Opción 3: Actualizar el país con código 107. capital -> Capital City."); + gestor.actualizarPaisCodigo107(); + break; + case "4": + System.out.println("Opción 4: Eliminar el continente con código 02."); + gestor.eliminarContinente("02"); + break; + } + + scanner.close(); + } + + public List consultarPaisesAmericanosEmpiezanSa() { + List listaPaises = null; + + IPaisDAO paisDAO = new PaisDaoHibernate(); + listaPaises = paisDAO.obtenerListaPaisesAmericanosEmpiezanSa(); + + return listaPaises; + } + + public void eliminarContinente(String codigo) { + IContinenteDAO continenteDAO = new ContinenteDaoHibernate(); + continenteDAO.eliminarContinentePorCodigo(codigo); + } + + public Pais actualizarPaisCodigo107() { + Pais pais = null; + int identificadorPais = 107; + + IPaisDAO paisDAO = new PaisDaoHibernate(); + pais = paisDAO.obtenerPaisPorID(identificadorPais); + pais.setCapital("Capital City"); + paisDAO.actualizarPais(pais); + + pais = paisDAO.obtenerPaisPorID(identificadorPais); + System.out.println(pais); + return pais; + } + + public void anyadirContinente(Continente continente) { + IContinenteDAO continenteDAO = new ContinenteDaoHibernate(); + continenteDAO.anyadirContinente(continente); + System.out.println("Se ha creado el continente: " + continente); + + } + + +} \ No newline at end of file diff --git a/src/main/java/es/palomafp/aadd/inm/dao/IContinenteDAO.java b/src/main/java/es/palomafp/aadd/inm/dao/IContinenteDAO.java new file mode 100644 index 0000000..ca4fe83 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/IContinenteDAO.java @@ -0,0 +1,15 @@ +package es.palomafp.aadd.inm.dao; + +import es.palomafp.aadd.inm.vo.Continente; + +/** + * + * IContinenteDAO: Interfaz que define las operaciones de acceso a datos para Continente. + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public interface IContinenteDAO { + void anyadirContinente(Continente continente); + void eliminarContinentePorCodigo(String codigo); +} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/IPaisDAO.java b/src/main/java/es/palomafp/aadd/inm/dao/IPaisDAO.java new file mode 100644 index 0000000..53c9be1 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/IPaisDAO.java @@ -0,0 +1,18 @@ +package es.palomafp.aadd.inm.dao; + +import java.util.List; + +import es.palomafp.aadd.inm.vo.Pais; + +/** + * + * IPaisDAO: Interfaz que define las operaciones de acceso a datos para País. + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public interface IPaisDAO { + Pais obtenerPaisPorID(int identificador); + List obtenerListaPaisesAmericanosEmpiezanSa(); + void actualizarPais(Pais pais); +} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/hbm/ContinenteDaoHibernate.java b/src/main/java/es/palomafp/aadd/inm/dao/hbm/ContinenteDaoHibernate.java new file mode 100644 index 0000000..747b4f5 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/hbm/ContinenteDaoHibernate.java @@ -0,0 +1,61 @@ +package es.palomafp.aadd.inm.dao.hbm; + +import org.hibernate.HibernateException; +import org.hibernate.Session; +import org.hibernate.Transaction; +import org.hibernate.query.MutationQuery; + +import es.palomafp.aadd.inm.dao.IContinenteDAO; +import es.palomafp.aadd.inm.gestor.GestorSesionesHibernate; +import es.palomafp.aadd.inm.vo.Continente; + +/** + * + * ContinenteDaoJDBC: Clase que implementa el interfaz IContinenteDAO + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class ContinenteDaoHibernate implements IContinenteDAO { + private Transaction transaccion = null; + + @Override + public void anyadirContinente(Continente continente) { + + // try con recursos "cerrables": Connection, Statement + try (Session sesion = GestorSesionesHibernate.getSession();) { + transaccion = sesion.beginTransaction(); + + sesion.persist(continente); + + transaccion.commit(); + } catch (HibernateException e) { + e.printStackTrace(); + } + } + + @Override + public void eliminarContinentePorCodigo(String codigo) { + + try (Session sesion = GestorSesionesHibernate.getSession();) { + transaccion = sesion.beginTransaction(); + + String sentenciaBorradoPaisesHQL = "DELETE FROM Pais p WHERE p.continente.codigo = :codigo"; + // Obsoleto + // Query senteciaBorradoPaises = sesion.createQuery(sentenciaBorradoPaisesHQL, Pais.class); + MutationQuery senteciaBorradoPaises = sesion.createMutationQuery(sentenciaBorradoPaisesHQL); + senteciaBorradoPaises.setParameter("codigo", codigo); + senteciaBorradoPaises.executeUpdate(); + + String sentenciaBorradoContinenteHQL = "DELETE FROM Continente WHERE codigo= :codigo"; + MutationQuery sentenciaBorradoContinente = sesion.createMutationQuery(sentenciaBorradoContinenteHQL); + sentenciaBorradoContinente.setParameter("codigo", codigo); + sentenciaBorradoContinente.executeUpdate(); + + transaccion.commit(); + } catch (HibernateException e) { + e.printStackTrace(); + } + + } +} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/hbm/PaisDaoHibernate.java b/src/main/java/es/palomafp/aadd/inm/dao/hbm/PaisDaoHibernate.java new file mode 100644 index 0000000..0b677e6 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/hbm/PaisDaoHibernate.java @@ -0,0 +1,75 @@ +package es.palomafp.aadd.inm.dao.hbm; + +import java.util.List; + +import org.hibernate.Session; +import org.hibernate.Transaction; +import org.hibernate.query.SelectionQuery; + +import es.palomafp.aadd.inm.dao.IPaisDAO; +import es.palomafp.aadd.inm.gestor.GestorSesionesHibernate; +import es.palomafp.aadd.inm.vo.Pais; + +/** + * + * PaisDaoJDBC: Clase que implementa el interfaz IPaisDAO + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class PaisDaoHibernate implements IPaisDAO { + private Transaction transaccion = null; + + @Override + public List obtenerListaPaisesAmericanosEmpiezanSa() { + List listaPaises = null; + String sentenciaHQL = """ + SELECT p + FROM Pais p JOIN FETCH p.continente + WHERE p.continente.codigo ='02' + AND p.nombrePais LIKE 'Sa%' + """; + // try con recursos "cerrables": Session + try (Session sesion = GestorSesionesHibernate.getSession();) { + // Obsoleto + // Query sentenciaConsulta = sesion.createQuery(sentenciaHQL, Pais.class); + + SelectionQuery sentenciaConsulta = sesion.createSelectionQuery(sentenciaHQL, Pais.class); + listaPaises = sentenciaConsulta.getResultList(); + + } catch (Exception e) { + e.printStackTrace(); + } + return listaPaises; + } + + @Override + public void actualizarPais(Pais pais) { + + // try con recursos "cerrables": Session + try (Session sesion = GestorSesionesHibernate.getSession();) { + transaccion = sesion.beginTransaction(); + + if (!sesion.contains(pais)) + sesion.merge(pais); + + transaccion.commit(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public Pais obtenerPaisPorID(int identificador) { + Pais pais = null; + + // try con recursos "cerrables": Session + try (Session sesion = GestorSesionesHibernate.getSession();) { + pais = sesion.find(Pais.class, identificador); + } catch (Exception e) { + e.printStackTrace(); + } + return pais; + } + +} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/jdbc/ContinenteDaoJDBC.java b/src/main/java/es/palomafp/aadd/inm/dao/jdbc/ContinenteDaoJDBC.java new file mode 100644 index 0000000..25ea3ff --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/jdbc/ContinenteDaoJDBC.java @@ -0,0 +1,59 @@ +package es.palomafp.aadd.inm.dao.jdbc; + +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; + +import es.palomafp.aadd.inm.dao.IContinenteDAO; +import es.palomafp.aadd.inm.gestor.GestorConexionJDBC; +import es.palomafp.aadd.inm.vo.Continente; + +/** + * + * ContinenteDaoJDBC: Clase que implementa el interfaz IContinenteDAO + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class ContinenteDaoJDBC implements IContinenteDAO { + + @Override + public void anyadirContinente(Continente continente) { + String sentenciaSQL = "INSERT INTO T_CONTINENTE (codigo, nombre_continente) VALUES ('%s', '%s')"; + + sentenciaSQL = String.format(sentenciaSQL, continente.getCodigo(), continente.getNombreContinente()); + + // try con recursos "cerrables": Connection, Statement + try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC(); + Statement stm = conexion.createStatement();) { + stm.executeUpdate(sentenciaSQL); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + @Override + public void eliminarContinentePorCodigo(String codigo) { + String sentenciaBorradoPaisesSQL = "DELETE FROM T_PAIS WHERE cod_continente='%s'"; + sentenciaBorradoPaisesSQL = String.format(sentenciaBorradoPaisesSQL, codigo); + + String sentenciaBorradoContinenteSQL = "DELETE FROM T_CONTINENTE WHERE codigo='%s'"; + sentenciaBorradoContinenteSQL = String.format(sentenciaBorradoContinenteSQL, codigo); + + // try con recursos "cerrables": Connection, Statement + try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC(); + Statement stm = conexion.createStatement();) { + + // Se desactiva 'autocommit' para manejar la transacción manualmente + conexion.setAutoCommit(false); + stm.executeUpdate(sentenciaBorradoPaisesSQL); + stm.executeUpdate(sentenciaBorradoContinenteSQL); + + // Confirmamos la transacción + conexion.commit(); + } catch (SQLException e) { + e.printStackTrace(); + } + + } +} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/jdbc/PaisDaoJDBC.java b/src/main/java/es/palomafp/aadd/inm/dao/jdbc/PaisDaoJDBC.java new file mode 100644 index 0000000..f674436 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/jdbc/PaisDaoJDBC.java @@ -0,0 +1,106 @@ +package es.palomafp.aadd.inm.dao.jdbc; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +import es.palomafp.aadd.inm.dao.IPaisDAO; +import es.palomafp.aadd.inm.gestor.GestorConexionJDBC; +import es.palomafp.aadd.inm.vo.Continente; +import es.palomafp.aadd.inm.vo.Pais; + +/** + * + * PaisDaoJDBC: Clase que implementa el interfaz IPaisDAO + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class PaisDaoJDBC implements IPaisDAO { + + @Override + public List obtenerListaPaisesAmericanosEmpiezanSa() { + List listaPaises = null; + String sentenciaSQL = """ + SELECT * + FROM T_PAIS p join T_CONTINENTE c + on cod_continente= codigo + WHERE codigo='02' AND p.nombre_pais LIKE 'Sa%' + """; + + // try con recursos "cerrables": Connection, Statement, ResultSet + try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC(); + Statement stm = conexion.createStatement(); + ResultSet resultado = stm.executeQuery(sentenciaSQL);) { + listaPaises = new ArrayList(); + while (resultado.next()) { + // Completar los atributos de continente + Continente continente = new Continente(); + continente.setCodigo(resultado.getString("codigo")); + continente.setNombreContinente(resultado.getString("nombre_continente")); + + Pais pais = new Pais(); + pais.setIdentificador(resultado.getInt("identificador")); + pais.setNombrePais(resultado.getString("nombre_pais")); + pais.setCapital(resultado.getString("capital")); + pais.setContinente(continente); + + listaPaises.add(pais); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return listaPaises; + } + + @Override + public void actualizarPais(Pais pais) { + String sentenciaSQL = "update T_PAIS set capital= '%s' WHERE identificador=%d"; + sentenciaSQL = String.format(sentenciaSQL, pais.getCapital(), pais.getIdentificador()); + + // try con recursos "cerrables": Connection, Statement + try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC(); + Statement stm = conexion.createStatement();) { + stm.executeUpdate(sentenciaSQL); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + @Override + public Pais obtenerPaisPorID(int identificador) { + Pais pais = null; + String sentenciaSQL = """ + SELECT * + FROM T_PAIS p join T_CONTINENTE c + on cod_continente= codigo + WHERE identificador=%d + """; + sentenciaSQL = String.format(sentenciaSQL, identificador); + + // try con recursos "cerrables": Connection, Statement, ResultSet + try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC(); + Statement stm = conexion.createStatement(); + ResultSet resultado = stm.executeQuery(sentenciaSQL);) { + if (resultado.next()) { + // Completar los atributos de continente + Continente continente = new Continente(); + continente.setCodigo(resultado.getString("codigo")); + continente.setNombreContinente(resultado.getString("nombre_continente")); + + pais = new Pais(); + pais.setIdentificador(resultado.getInt("identificador")); + pais.setNombrePais(resultado.getString("nombre_pais")); + pais.setCapital(resultado.getString("capital")); + pais.setContinente(continente); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return pais; + } + +} diff --git a/src/main/java/es/palomafp/aadd/inm/gestor/GestorConexionJDBC.java b/src/main/java/es/palomafp/aadd/inm/gestor/GestorConexionJDBC.java new file mode 100644 index 0000000..dbe5041 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/gestor/GestorConexionJDBC.java @@ -0,0 +1,39 @@ +package es.palomafp.aadd.inm.gestor; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +/** + * + * GestorConexionJDBC: Clase que realiza .... + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 6 nov 2025 + * + * + */ + +public class GestorConexionJDBC { + + // Constructor privado para evitar instanciación + private GestorConexionJDBC() { + } + + public static Connection obtenerConexionJDBC() { + Connection conexion = null; + String driverJDBC= GestorFicheroConfiguracion.getValorDeConfiguracion("jdbc.driver"); + try { + Class.forName(driverJDBC); + + String urlJDBC= GestorFicheroConfiguracion.getValorDeConfiguracion("jdbc.url"); + String usuario= GestorFicheroConfiguracion.getValorDeConfiguracion("jdbc.usuario"); + String password= GestorFicheroConfiguracion.getValorDeConfiguracion("jdbc.password"); + + conexion=DriverManager.getConnection(urlJDBC, usuario, password); + } catch (ClassNotFoundException | SQLException e) { + e.printStackTrace(); + } + return conexion; + } +} + diff --git a/src/main/java/es/palomafp/aadd/inm/gestor/GestorFicheroConfiguracion.java b/src/main/java/es/palomafp/aadd/inm/gestor/GestorFicheroConfiguracion.java new file mode 100644 index 0000000..bd2a0b6 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/gestor/GestorFicheroConfiguracion.java @@ -0,0 +1,37 @@ +package es.palomafp.aadd.inm.gestor; + +import java.util.Properties; + +/** + * + * GestorFicheroConfiguracion: Clase que se encarga de gestionar el fichero de configuración. + * + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class GestorFicheroConfiguracion { + private static final String RUTA_FICHERO_CONFIGURACION = "config/conf.properties"; + private static Properties propiedades; + + private GestorFicheroConfiguracion() { + // Constructor privado para evitar instanciación + } + static { + propiedades= new Properties(); + try { + // Fichero que está en el classpath + propiedades.load(GestorFicheroConfiguracion.class.getClassLoader().getResourceAsStream(RUTA_FICHERO_CONFIGURACION)); + + // Fichero con ruta relativa al proyecto +// propiedades.load(new FileInputStream(RUTA_FICHERO_CONFIGURACION)); + } catch (Exception e) { + e.printStackTrace(); + } + } + public static String getValorDeConfiguracion(String clave) { + String valor = null; + valor = propiedades.getProperty(clave); + return valor; + } +} diff --git a/src/main/java/es/palomafp/aadd/inm/gestor/GestorSesionesHibernate.java b/src/main/java/es/palomafp/aadd/inm/gestor/GestorSesionesHibernate.java new file mode 100644 index 0000000..7a70e76 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/gestor/GestorSesionesHibernate.java @@ -0,0 +1,42 @@ +package es.palomafp.aadd.inm.gestor; + +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; + +/** + * + * GestorSesionesHibernate: Clase que realiza .... + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 4 dic 2025 + * + * + */ + +public class GestorSesionesHibernate { + private static SessionFactory sessionFactory = null; + + private GestorSesionesHibernate() {// Constructor privado para evitar instanciación + } + + // Carga la configuración desde hibernate.cfg.xml + static { + try { + sessionFactory = new Configuration().configure().buildSessionFactory(); + } catch (Throwable ex) { + System.err.println("Error en SessionFactory: " + ex); + throw new ExceptionInInitializerError(ex); + } + } + + public static Session getSession() { + return sessionFactory.openSession(); + } + + public static void cerrarFactoria() { + if (sessionFactory != null) { + sessionFactory.close(); + } + } +} diff --git a/src/main/java/es/palomafp/aadd/inm/vo/Continente.java b/src/main/java/es/palomafp/aadd/inm/vo/Continente.java new file mode 100644 index 0000000..4d49fbf --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/vo/Continente.java @@ -0,0 +1,48 @@ +package es.palomafp.aadd.inm.vo; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; + +/** + * + * Continente: Clase que se usa para mapear la tabla de continentes + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 5 dic 2025 + * + * + */ + +@Entity +@Table(name="T_CONTINENTE") +public class Continente { + @Id + @Column(name="codigo", columnDefinition = "char(2)") + private String codigo; + + @Column(name="nombre_continente", length=30, nullable=true) + private String nombreContinente; + + public String getCodigo() { + return codigo; + } + + public void setCodigo(String codigo) { + this.codigo = codigo; + } + + public String getNombreContinente() { + return nombreContinente; + } + + public void setNombreContinente(String nombreContinente) { + this.nombreContinente = nombreContinente; + } + + @Override + public String toString() { + return "Continente [codigo=" + codigo + ", nombreContinente=" + nombreContinente + "]\n"; + } +} + diff --git a/src/main/java/es/palomafp/aadd/inm/vo/Pais.java b/src/main/java/es/palomafp/aadd/inm/vo/Pais.java new file mode 100644 index 0000000..b1eece8 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/vo/Pais.java @@ -0,0 +1,75 @@ +package es.palomafp.aadd.inm.vo; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +/** + * + * Continente: Clase que se usa para mapear la tabla de Países + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 5 dic 2025 + * + * + */ + +@Entity +@Table(name="T_PAIS") +public class Pais { + @Id + @Column(name="identificador") + private int identificador; + + @Column(name="nombre_pais", length=50) + private String nombrePais; + + @Column(name="capital", length=20) + private String capital; + + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name="cod_continente") + private Continente continente; + + public int getIdentificador() { + return identificador; + } + + public void setIdentificador(int identificador) { + this.identificador = identificador; + } + + public String getNombrePais() { + return nombrePais; + } + + public void setNombrePais(String nombrePais) { + this.nombrePais = nombrePais; + } + + public String getCapital() { + return capital; + } + + public void setCapital(String capital) { + this.capital = capital; + } + + public Continente getContinente() { + return continente; + } + + public void setContinente(Continente continente) { + this.continente = continente; + } + + @Override + public String toString() { + return "Pais [identificador=" + identificador + ", nombrePais=" + nombrePais + ", capital=" + capital + + ", continente=" + continente + "]\n"; + } +} + diff --git a/src/main/resources/config/conf.properties b/src/main/resources/config/conf.properties new file mode 100644 index 0000000..c13ce51 --- /dev/null +++ b/src/main/resources/config/conf.properties @@ -0,0 +1,5 @@ +# Parámetros de conexión a la base de datos MapaMundi en SGDB MySQL +jdbc.driver = org.postgresql.Driver +jdbc.url = jdbc:postgresql://5.189.134.76:5555/mapamundi +jdbc.usuario = isinm +jdbc.password = isidoro+nm-123 diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml new file mode 100644 index 0000000..4b86467 --- /dev/null +++ b/src/main/resources/hibernate.cfg.xml @@ -0,0 +1,46 @@ + + + + + jdbc:mysql://192.168.1.36:3306/Mapa_Mundi + com.mysql.cj.jdbc.Driver + + org.hibernate.dialect.MySQLDialect + + root + mysql_123 + + + none + true + true + + + true + false + bytebuddy + + + false + 3 + 10 + true + true + + + 0 + 0 + + + false + false + + + + + + + + \ No newline at end of file