No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Java SE: SQL y Bases de Datos

Curso de Java SE: SQL y Bases de Datos

Ana Fernanda Gutierrez Villanueva

Ana Fernanda Gutierrez Villanueva

Implementación del Patrón Repositorio en Java

10/22
Recursos

En la implementación del patrón, creamos varias clases principales en nuestro proyecto.

En nuestro paquete util, tenemos la clase DatabaseConnection, que se encarga de manejar la lógica de la conexión a la base de datos. Utilizamos el patrón Singleton para garantizar que solo tengamos una instancia de conexión en todo el programa. La clase DatabaseConnection expone un método getInstance() que nos permite obtener la instancia de la conexión en cualquier parte del programa.

En nuestro paquete model, tenemos la clase Employee, que representa el modelo de datos para los empleados. En esta clase, definimos los atributos de los empleados, así como los métodos getter, setter, toString y los constructores (tanto el constructor vacío como el constructor que recibe los datos del empleado).

Por último, tenemos una interfaz Repository que define los métodos comunes para realizar las operaciones CRUD (Create, Read, Update, Delete) y que vamos a desarrollar en nuestra clase EmployeeRepository. Esta interfaz utiliza un tipo genérico para permitir que pueda ser implementada por diferentes clases y trabajar con diferentes tipos de datos. Los métodos comunes que se definen en esta interfaz son findAll(), getById(), save() y delete(), que representan las operaciones de búsqueda de todos los elementos, búsqueda por ID, guardado y eliminación, respectivamente.

  • ```````findAll**(): Este método devuelve una lista de elementos de tipo **T`. Es utilizado para obtener todos los elementos almacenados.
  • getById(Integer id): Este método recibe un identificador (id) y devuelve un elemento de tipo T que corresponde a ese identificador.
  • save(T t): Este método recibe un objeto de tipo T y lo guarda. Es utilizado para insertar o actualizar un elemento.
  • delete(Integer id): Este método recibe un identificador (id) y elimina el elemento correspondiente a ese identificador.

La letra T es una convención comúnmente utilizada en la programación genérica para representar un tipo genérico. Permite una mayor flexibilidad y reutilización del código, ya que la interfaz Repository puede ser implementada para trabajar con diferentes tipos de objetos sin tener que especificar un tipo concreto en el momento de su definición.

Aportes 11

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Declarar la URL, el usuario y la contraseña como constantes utilizando la palabra clave final es una buena práctica, ya que estos valores no cambiarán durante la ejecución del programa:

private static final String URL = "jdbc:mysql://localhost:3306/project";
private static final String USER = "user";
private static final String PASSWORD = "password";

podria ese POJO Employee llamarse EmployeeDTO, si estamos habalndo de terminos de dominio o logica de negocio, EmployeeEntity si estamos hablando de la capa de persistencia

se que talvez aca no se vea eso, pero java no usa .env como otros lenguajes? es que eso de subir la info de la conección a la db como que no lo veo bien.

Ya tenemos separado las responsabilidades!

El patrón Singleton es un diseño que asegura que una clase tenga una única instancia y proporciona un punto de acceso global a esa instancia. En el contexto de tu clase, se utiliza para manejar la conexión a la base de datos, garantizando que no se creen múltiples conexiones innecesarias. Esto optimiza el uso de recursos y evita problemas de concurrencia. La instancia se accede a través de un método estático, generalmente llamado `getInstance()`, que crea la instancia solo si no existe una.
package CAPAS.UTILITARIO; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class CONECTARBD { private static String url="jdbc:mysql://localhost:3306/cuarto"; private static String user="root"; private static String pass="JACZ"; private static Connection myConn; public static Connection getInstance() throws SQLException { if (myConn == null) { myConn = DriverManager.getConnection(url, user, pass); } return myConn; } }
Estás cerrando la conexión creada en el Singleton... piénsalo

Codigo

public class DatabaseConnection{
    private static String url = "jdbc:mysql://localhost:3306/basicos_jdbc";
    private static String user = "root";
    private static String password = "9PM8tv$h#$*e";

    private static Connection instance;

    public static Connection getInstance() throws SQLException {
        if(instance == null) instance = DriverManager.getConnection(url, user, password);
        System.out.println("CONEXION EXITOSA");
        return instance;
    }
}




public class Main {
    public static void main(String[] args){
        try (Connection myConn = DatabaseConnection.getInstance()){
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Conexión errada");
        }
    }
}

**Yo use db de ejemplo, asi que tuve que adaptar, tambien cree un enum para genero.** ```java package org.example.tmendoza.model; import java.util.Date; public class Employee { private Integer emp_no; private Date birth_date; private String first_name; private String last_name; private Gender gender; private Date hire_date; private String email; public Employee(Integer emp_no, Date birth_date, String first_name, String last_name, Gender gender, Date hire_date, String email) { this.emp_no = emp_no; this.birth_date = birth_date; this.first_name = first_name; this.last_name = last_name; this.gender = gender; this.hire_date = hire_date; this.email = email; } public Integer getEmp_no() { return emp_no; } public void setEmp_no(Integer emp_no) { this.emp_no = emp_no; } public Date getBirth_date() { return birth_date; } public void setBirth_date(Date birth_date) { this.birth_date = birth_date; } public String getFirst_name() { return first_name; } public void setFirst_name(String first_name) { this.first_name = first_name; } public String getLast_name() { return last_name; } public void setLast_name(String last_name) { this.last_name = last_name; } public Gender getGender() { return gender; } public void setGender(Gender gender) { this.gender = gender; } public Date getHire_date() { return hire_date; } public void setHire_date(Date hire_date) { this.hire_date = hire_date; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "Employee{" + "emp_no=" + emp_no + ", birth_date=" + birth_date + ", first_name='" + first_name + '\'' + ", last_name='" + last_name + '\'' + ", gender=" + gender + ", hire_date=" + hire_date + ", email='" + email + '\'' + '}'; } } ```package org.example.tmendoza.model; import java.util.Date; public class Employee { private Integer emp\_no; private Date birth\_date; private String first\_name; private String last\_name; private Gender gender; private Date hire\_date; private String email; public Employee(Integer emp\_no, Date birth\_date, String first\_name, String last\_name, Gender gender, Date hire\_date, String email) { this.emp\_no = emp\_no; this.birth\_date = birth\_date; this.first\_name = first\_name; this.last\_name = last\_name; this.gender = gender; this.hire\_date = hire\_date; this.email = email; } public Integer getEmp\_no() { return emp\_no; } public void setEmp\_no(Integer emp\_no) { this.emp\_no = emp\_no; } public Date getBirth\_date() { return birth\_date; } public void setBirth\_date(Date birth\_date) { this.birth\_date = birth\_date; } public String getFirst\_name() { return first\_name; } public void setFirst\_name(String first\_name) { this.first\_name = first\_name; } public String getLast\_name() { return last\_name; } public void setLast\_name(String last\_name) { this.last\_name = last\_name; } public Gender getGender() { return gender; } public void setGender(Gender gender) { this.gender = gender; } public Date getHire\_date() { return hire\_date; } public void setHire\_date(Date hire\_date) { this.hire\_date = hire\_date; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "Employee{" + "emp\_no=" + emp\_no + ", birth\_date=" + birth\_date + ", first\_name='" + first\_name + '\\'' + ", last\_name='" + last\_name + '\\'' + ", gender=" + gender + ", hire\_date=" + hire\_date + ", email='" + email + '\\'' + '}'; } }

Siguiendo el paso a paso voy entendiendo, cómo opera el patón Repository y su uso práctico en el ejemplo.