From 182d91d2f5d57fd454e3ffed5b17ee6f8d5e6264 Mon Sep 17 00:00:00 2001 From: Isidoro Nevares Date: Wed, 11 Mar 2026 17:51:51 +0100 Subject: [PATCH] Commit inicial --- .classpath | 41 ++++ .gitignore | 3 + .project | 34 ++++ .settings/org.eclipse.jdt.apt.core.prefs | 2 + .settings/org.eclipse.jdt.core.prefs | 14 ++ .settings/org.eclipse.m2e.core.prefs | 4 + README.md | 112 +++++++++++ pom.xml | 21 ++ .../org/lapaloma/mapamundi/AppMapaMundi.java | 164 ++++++++++++++++ .../mapamundi/dao/IContinenteDAO.java | 14 ++ .../mapamundi/dao/impl/ContinenteDaoJDBC.java | 181 ++++++++++++++++++ .../gestores/GestorConexionJDBC.java | 29 +++ .../gestores/GestorFicheroConfiguracion.java | 40 ++++ .../org/lapaloma/mapamundi/vo/Continente.java | 44 +++++ src/main/resources/config.properties | 6 + 15 files changed, 709 insertions(+) create mode 100644 .classpath create mode 100644 .gitignore create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.apt.core.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 README.md create mode 100644 pom.xml create mode 100644 src/main/java/org/lapaloma/mapamundi/AppMapaMundi.java create mode 100644 src/main/java/org/lapaloma/mapamundi/dao/IContinenteDAO.java create mode 100644 src/main/java/org/lapaloma/mapamundi/dao/impl/ContinenteDaoJDBC.java create mode 100644 src/main/java/org/lapaloma/mapamundi/gestores/GestorConexionJDBC.java create mode 100644 src/main/java/org/lapaloma/mapamundi/gestores/GestorFicheroConfiguracion.java create mode 100644 src/main/java/org/lapaloma/mapamundi/vo/Continente.java create mode 100644 src/main/resources/config.properties diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..8e75d71 --- /dev/null +++ b/.classpath @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..93e00af --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin/ +*.class +/target/ diff --git a/.project b/.project new file mode 100644 index 0000000..29a5726 --- /dev/null +++ b/.project @@ -0,0 +1,34 @@ + + + aaee_ra3_proy3 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1772465433562 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..d4313d4 --- /dev/null +++ b/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=false diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..0197698 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,14 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=23 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=23 +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.processAnnotations=disabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=23 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/README.md b/README.md new file mode 100644 index 0000000..369aa7b --- /dev/null +++ b/README.md @@ -0,0 +1,112 @@ +# Maven – Resumen rápido + +## ¿Qué es Maven? + +**Apache Maven** es una herramienta de gestión y automatización de proyectos Java. + +Permite compilar, probar, empaquetar y gestionar dependencias de forma automática. +Todo se configura mediante un archivo central llamado `pom.xml`. + +--- + +## Conceptos básicos + +### POM (Project Object Model) + +Es el archivo `pom.xml`, donde se define: + +* Información del proyecto (`groupId`, `artifactId`, `version`) +* Dependencias +* Plugins +* Configuración de compilación + +Ejemplo básico: +```xml +org.ejemplo +mi-proyecto +1.0.0 +``` + +--- + +## Ciclo de vida de Maven (Build Lifecycle) + +El ciclo de vida principal está formado por fases que se ejecutan en orden: + +| Fase | Descripción | +| -------- | ------------------------------------------- | +| validate | Comprueba que el proyecto es correcto | +| compile | Compila el código fuente | +| test | Ejecuta los tests | +| package | Empaqueta la aplicación (JAR/WAR) | +| verify | Verifica que el paquete es válido | +| install | Instala el paquete en el repositorio local | +| deploy | Publica el paquete en un repositorio remoto | + +Ejemplo de ejecución: +```bash +mvn clean install +``` + +--- + +## Repositorios + +Maven descarga las dependencias desde repositorios. + +Tipos: + +* **Local** → en el ordenador (`~/.m2`) +* **Central** → repositorio público de Maven +* **Remoto** → repositorios privados (Nexus, Artifactory) + +--- + +## Dependencias + +Las librerías necesarias para el proyecto se declaran en el `pom.xml`. + +Ejemplo: +```xml + + mysql + mysql-connector-java + 8.0.33 + +``` + +Maven descargará automáticamente la librería. + +--- + +## Comandos Maven más usados + +| Comando | Función | +| ------------- | -------------------------------------------- | +| `mvn compile` | Compila el proyecto | +| `mvn test` | Ejecuta los tests | +| `mvn package` | Genera el JAR/WAR | +| `mvn install` | Instala el artefacto en el repositorio local | +| `mvn clean` | Elimina la carpeta `target` | + +--- + +## Estructura típica de un proyecto Maven +``` +proyecto +│ +├─ pom.xml +└─ src + ├─ main + │ ├─ java + │ └─ resources + └─ test + └─ java +``` + +--- + +## Idea clave + +Maven sigue el principio **"Convention over Configuration"**: +si respetas su estructura estándar de proyecto, **necesitas muy poca configuración**. \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..972aff0 --- /dev/null +++ b/pom.xml @@ -0,0 +1,21 @@ + + 4.0.0 + org.lapaloma.mapamundi + aaee_mapamundi + mapamundi-0.0.1 + + + 17 + 17 + + + + + + com.mysql + mysql-connector-j + 9.6.0 + compile + + + \ No newline at end of file diff --git a/src/main/java/org/lapaloma/mapamundi/AppMapaMundi.java b/src/main/java/org/lapaloma/mapamundi/AppMapaMundi.java new file mode 100644 index 0000000..8a56060 --- /dev/null +++ b/src/main/java/org/lapaloma/mapamundi/AppMapaMundi.java @@ -0,0 +1,164 @@ +package org.lapaloma.mapamundi; + +import java.util.List; +import java.util.Scanner; + +import org.lapaloma.mapamundi.dao.IContinenteDAO; +import org.lapaloma.mapamundi.dao.impl.ContinenteDaoJDBC; +import org.lapaloma.mapamundi.vo.Continente; + +public class AppMapaMundi { + + private Scanner scanner = new Scanner(System.in); + private IContinenteDAO continenteDAO = new ContinenteDaoJDBC(); + + public static void main(String[] args) { + AppMapaMundi app = new AppMapaMundi(); + app.iniciar(); + } + + private void iniciar() { + + String opcion = ""; + + do { + + mostrarMenu(); + opcion = scanner.nextLine(); + + switch (opcion) { + + case "1": + crearContinente(); + break; + + case "2": + buscarPorCodigo(); + break; + + case "3": + buscarPorNombre(); + break; + + case "4": + listarContinentes(); + break; + + case "5": + actualizarContinente(); + break; + + case "6": + borrarContinente(); + break; + + case "S": + case "s": + System.out.println("Saliendo de la aplicación..."); + break; + + default: + System.out.println("Opción no válida"); + } + + } while (!opcion.equalsIgnoreCase("s")); + + scanner.close(); + } + + private void mostrarMenu() { + + System.out.println("\n===== MAPA MUNDI - MENÚ ====="); + System.out.println("1. Crear continente"); + System.out.println("2. Buscar continente por código"); + System.out.println("3. Buscar continente por nombre"); + System.out.println("4. Listar todos los continentes"); + System.out.println("5. Actualizar continente"); + System.out.println("6. Borrar continente"); + System.out.println("S. Salir"); + System.out.print("Seleccione una opción: "); + } + + private void crearContinente() { + + System.out.print("Código del continente: "); + String codigo = scanner.nextLine(); + + System.out.print("Nombre del continente: "); + String nombre = scanner.nextLine(); + + Continente continente = new Continente(); + continente.setCodigo(codigo); + continente.setNombre(nombre); + + continenteDAO.crearContinente(continente); + + System.out.println("Continente creado correctamente."); + } + + private void buscarPorCodigo() { + + System.out.print("Introduce el código: "); + String codigo = scanner.nextLine(); + + Continente continente = continenteDAO.obtenerContinentePorClave(codigo); + + if (continente != null) { + System.out.println("Código: " + continente.getCodigo()); + System.out.println("Nombre: " + continente.getNombre()); + } else { + System.out.println("No se encontró el continente."); + } + } + + private void buscarPorNombre() { + + System.out.print("Introduce el nombre: "); + String nombre = scanner.nextLine(); + + List lista = continenteDAO.obtenerContinentePorNombre(nombre); + + for (Continente c : lista) { + System.out.println(c.getCodigo() + " - " + c.getNombre()); + } + } + + private void listarContinentes() { + + List lista = continenteDAO.obtenerListaContinentes(); + + for (Continente c : lista) { + System.out.println(c.getCodigo() + " - " + c.getNombre()); + } + } + + private void actualizarContinente() { + + System.out.print("Código del continente a actualizar: "); + String codigo = scanner.nextLine(); + + System.out.print("Nuevo nombre: "); + String nombre = scanner.nextLine(); + + Continente continente = new Continente(); + continente.setCodigo(codigo); + continente.setNombre(nombre); + + continenteDAO.actualizarContinente(continente); + + System.out.println("Continente actualizado."); + } + + private void borrarContinente() { + + System.out.print("Código del continente a borrar: "); + String codigo = scanner.nextLine(); + + Continente continente = new Continente(); + continente.setCodigo(codigo); + + continenteDAO.borrarContinente(continente); + + System.out.println("Continente eliminado."); + } +} \ No newline at end of file diff --git a/src/main/java/org/lapaloma/mapamundi/dao/IContinenteDAO.java b/src/main/java/org/lapaloma/mapamundi/dao/IContinenteDAO.java new file mode 100644 index 0000000..0e9ddf7 --- /dev/null +++ b/src/main/java/org/lapaloma/mapamundi/dao/IContinenteDAO.java @@ -0,0 +1,14 @@ +package org.lapaloma.mapamundi.dao; + +import java.util.List; + +import org.lapaloma.mapamundi.vo.Continente; + +public interface IContinenteDAO { + public Continente obtenerContinentePorClave(String codigo) ; + public Continente actualizarContinente(Continente coche) ; + public Continente crearContinente(Continente coche); + public void borrarContinente(Continente coche); + public List obtenerListaContinentes(); + public List obtenerContinentePorNombre(String nombre); +} diff --git a/src/main/java/org/lapaloma/mapamundi/dao/impl/ContinenteDaoJDBC.java b/src/main/java/org/lapaloma/mapamundi/dao/impl/ContinenteDaoJDBC.java new file mode 100644 index 0000000..580f9a7 --- /dev/null +++ b/src/main/java/org/lapaloma/mapamundi/dao/impl/ContinenteDaoJDBC.java @@ -0,0 +1,181 @@ +package org.lapaloma.mapamundi.dao.impl; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.lapaloma.mapamundi.dao.IContinenteDAO; +import org.lapaloma.mapamundi.gestores.GestorConexionJDBC; +import org.lapaloma.mapamundi.vo.Continente; + +public class ContinenteDaoJDBC implements IContinenteDAO { + + @Override + public Continente obtenerContinentePorClave(String codigo) { + Continente continente = null; + + String sentenciaSQL = """ + SELECT * FROM T_CONTINENTE + WHERE codigo=? + """; + + try (Connection conexion = GestorConexionJDBC.getConexionSGDB(); + PreparedStatement sentenciaJDBCPreparada = conexion.prepareStatement(sentenciaSQL);) { + + sentenciaJDBCPreparada.setString(1, codigo); + System.out.println(sentenciaJDBCPreparada); + + ResultSet resultadoSentencia = sentenciaJDBCPreparada.executeQuery(); + + if (resultadoSentencia.next()) { + continente = getLineaFromResultSet(resultadoSentencia); + } + + } catch (Exception e) { + e.printStackTrace(); + } + + return continente; + } + + @Override + public Continente actualizarContinente(Continente continente) { + + String sentenciaSQL = """ + UPDATE T_CONTINENTE + SET nombre_continente=? + WHERE codigo=? + """; + + try (Connection conexion = GestorConexionJDBC.getConexionSGDB(); + PreparedStatement sentenciaJDBCPreparada = conexion.prepareStatement(sentenciaSQL);) { + + sentenciaJDBCPreparada.setString(1, continente.getNombre()); + sentenciaJDBCPreparada.setString(2, continente.getCodigo()); + + System.out.println(sentenciaJDBCPreparada); + + sentenciaJDBCPreparada.executeUpdate(); + + } catch (Exception e) { + e.printStackTrace(); + } + + return continente; + } + + @Override + public Continente crearContinente(Continente continente) { + + String sentenciaSQL = """ + INSERT INTO T_CONTINENTE (codigo, nombre_continente) + VALUES (?, ?) + """; + + try (Connection conexion = GestorConexionJDBC.getConexionSGDB(); + PreparedStatement sentenciaJDBCPreparada = conexion.prepareStatement(sentenciaSQL);) { + + sentenciaJDBCPreparada.setString(1, continente.getCodigo()); + sentenciaJDBCPreparada.setString(2, continente.getNombre()); + + System.out.println(sentenciaJDBCPreparada); + + sentenciaJDBCPreparada.executeUpdate(); + + } catch (Exception e) { + e.printStackTrace(); + } + + return continente; + } + + @Override + public void borrarContinente(Continente continente) { + + String sentenciaSQL = """ + DELETE FROM T_CONTINENTE + WHERE codigo=? + """; + + try (Connection conexion = GestorConexionJDBC.getConexionSGDB(); + PreparedStatement sentenciaJDBCPreparada = conexion.prepareStatement(sentenciaSQL);) { + + sentenciaJDBCPreparada.setString(1, continente.getCodigo()); + + sentenciaJDBCPreparada.executeUpdate(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public List obtenerListaContinentes() { + + List lista = new ArrayList<>(); + + String sentenciaSQL = """ + SELECT * FROM T_CONTINENTE + """; + + try (Connection conexion = GestorConexionJDBC.getConexionSGDB(); + PreparedStatement sentenciaJDBCPreparada = conexion.prepareStatement(sentenciaSQL);) { + + System.out.println(sentenciaJDBCPreparada); + + ResultSet resultadoSentencia = sentenciaJDBCPreparada.executeQuery(); + + while (resultadoSentencia.next()) { + lista.add(getLineaFromResultSet(resultadoSentencia)); + } + + } catch (Exception e) { + e.printStackTrace(); + } + + return lista; + } + + @Override + public List obtenerContinentePorNombre(String nombre) { + + List lista = new ArrayList<>(); + + String sentenciaSQL = """ + SELECT * FROM T_CONTINENTE + WHERE nombre_continente LIKE ? + """; + + try (Connection conexion = GestorConexionJDBC.getConexionSGDB(); + PreparedStatement sentenciaJDBCPreparada = conexion.prepareStatement(sentenciaSQL);) { + + sentenciaJDBCPreparada.setString(1, "%" + nombre + "%"); + + System.out.println(sentenciaJDBCPreparada); + + ResultSet resultadoSentencia = sentenciaJDBCPreparada.executeQuery(); + + while (resultadoSentencia.next()) { + lista.add(getLineaFromResultSet(resultadoSentencia)); + } + + } catch (Exception e) { + e.printStackTrace(); + } + + return lista; + } + + private Continente getLineaFromResultSet(ResultSet resultadoSentencia) throws SQLException { + + Continente continente = new Continente(); + + continente.setCodigo(resultadoSentencia.getString("codigo")); + continente.setNombre(resultadoSentencia.getString("nombre_continente")); + + return continente; + } +} \ No newline at end of file diff --git a/src/main/java/org/lapaloma/mapamundi/gestores/GestorConexionJDBC.java b/src/main/java/org/lapaloma/mapamundi/gestores/GestorConexionJDBC.java new file mode 100644 index 0000000..da7160c --- /dev/null +++ b/src/main/java/org/lapaloma/mapamundi/gestores/GestorConexionJDBC.java @@ -0,0 +1,29 @@ +package org.lapaloma.mapamundi.gestores; + +import java.sql.Connection; +import java.sql.DriverManager; + +public class GestorConexionJDBC { + + // Evita que pueda construirse un objeto de la clase. + private GestorConexionJDBC() { + } + + public static Connection getConexionSGDB() throws Exception { + Connection conexionSGDB = null; + + // Datos URL + String urlBBDD = GestorFicheroConfiguracion.obtenerValor("jdbc.url"); + + String usuario = GestorFicheroConfiguracion.obtenerValor("jdbc.usuario"); + String contrasenya = GestorFicheroConfiguracion.obtenerValor("jdbc.password"); + + String claseDriver = GestorFicheroConfiguracion.obtenerValor("jdbc.driver"); + Class.forName(claseDriver); + + conexionSGDB = DriverManager.getConnection(urlBBDD, usuario, contrasenya); + + return conexionSGDB; + } + +} diff --git a/src/main/java/org/lapaloma/mapamundi/gestores/GestorFicheroConfiguracion.java b/src/main/java/org/lapaloma/mapamundi/gestores/GestorFicheroConfiguracion.java new file mode 100644 index 0000000..ba16f14 --- /dev/null +++ b/src/main/java/org/lapaloma/mapamundi/gestores/GestorFicheroConfiguracion.java @@ -0,0 +1,40 @@ +/** + * + */ +package org.lapaloma.mapamundi.gestores; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +/** +* @author Isidoro Nevares Martín - IES Virgen de la Paloma +* @date 20 feb 2026 +* +*/ +public class GestorFicheroConfiguracion { + private static final Properties PROPIEDADES = new Properties(); + + static { + try (InputStream is = GestorFicheroConfiguracion.class.getClassLoader() + .getResourceAsStream("config.properties")) { + if (is != null) { + PROPIEDADES.load(is); + } else { + throw new IllegalStateException("No se encontró application.properties en el classpath"); + } + } catch (IOException e) { + throw new IllegalStateException("Error al cargar application.properties", e); + } + } + + /** + * Obtiene el valor asociado a la clave especificada. + * + * @param clave la clave a buscar + * @return el valor o {@code null} si no existe + */ + public static String obtenerValor(String clave) { + return PROPIEDADES.getProperty(clave); + } +} diff --git a/src/main/java/org/lapaloma/mapamundi/vo/Continente.java b/src/main/java/org/lapaloma/mapamundi/vo/Continente.java new file mode 100644 index 0000000..8bfd4e8 --- /dev/null +++ b/src/main/java/org/lapaloma/mapamundi/vo/Continente.java @@ -0,0 +1,44 @@ +package org.lapaloma.mapamundi.vo; + +/** + * + * Coche: Clase de persistencia que representa un coche de un concesionario. + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 03 marzo 2026 + * + * + */ +public class Continente { + private String codigo; + private String nombre; + + public Continente(String codigo, String nombre) { + super(); + this.codigo = codigo; + this.nombre = nombre; + } + + public Continente() { + super(); + } + + public String getCodigo() { + return codigo; + } + public void setCodigo(String codigo) { + this.codigo = codigo; + } + public String getNombre() { + return nombre; + } + public void setNombre(String nombre) { + this.nombre = nombre; + } + @Override + public String toString() { + return "Coche [codigo=" + codigo + ", nombre=" + nombre + "]"; + } + + +} diff --git a/src/main/resources/config.properties b/src/main/resources/config.properties new file mode 100644 index 0000000..b84feba --- /dev/null +++ b/src/main/resources/config.properties @@ -0,0 +1,6 @@ +# Parámetros de conexión a la base de datos MapaMundi en SGDB MySQL +jdbc.driver = com.mysql.cj.jdbc.Driver +jdbc.url = jdbc:mysql://23.21.171.246:3306/mapa_mundi +jdbc.usuario = isidoronm +jdbc.password = 1234 +