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

Leer Datos desde Java

11/22
Recursos

En el paquete repository, creamos la clase EmployeeRepository que implementa la interfaz Repository. En esta clase, implementamos todos los métodos definidos en la interfaz y comenzamos a codificar cada uno de ellos.

Comenzamos con los métodos findAll() y getById(), que corresponden a las operaciones de lectura en el CRUD. Aprendimos a extraer un método utilizando la opción “Refactor” > “Extract Method” en nuestro IDE. Esta técnica nos permitió reutilizar código y evitar repetir la lógica de asignación de valores a través de los métodos set de la clase Employee. En su lugar, creamos el método createEmployee, que nos ayuda a encapsular esa lógica y mejorar la legibilidad y mantenibilidad del código.

Aportes 18

Preguntas 1

Ordenar por:

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

En el paquete repository, creamos la clase EmployeeRepository que implementa la interfaz Repository. En esta clase, implementamos todos los métodos definidos en la interfaz y comenzamos a codificar cada uno de ellos.

Comenzamos con los métodos findAll() y getById(), que corresponden a las operaciones de lectura en el CRUD. Aprendimos a extraer un método utilizando la opción “Refactor” > “Extract Method” en nuestro IDE. Esta técnica nos permitió reutilizar código y evitar repetir la lógica de asignación de valores a través de los métodos set de la clase Employee. En su lugar, creamos el método createEmployee, que nos ayuda a encapsular esa lógica y mejorar la legibilidad y mantenibilidad del código.

Aquí dejo mi código para una estatica más agradable

    @Override
    public String toString() {
        return
                "\n-------------------------------------"+
                "\nEmployee" +
                "\nid: " + id +
                "\nfirst_name: " + first_name +
                "\npa_surname: " + pa_surname +
                "\nma_surname: " + ma_surname +
                "\nemail: " + email +
                "\nsalary: " + salary +
                "\n-------------------------------------"
        ;
    }

Gracias profe. Me ha costado un poco entender la lógica del patrón, por esto he visto el video varias veces. Pero éxito en mi ejercicio. Yo utilizo una tabla diferente.

Muy buena clase, sin embargo creo que faltó profundizar un poco porqué Repository es Interface, además lo de la notación \<T>; Si en los recursos pueden poner algo que trate sobre esto, sería ideal
```js package org.example.platzi.repository; import org.example.platzi.model.Employee; import org.example.platzi.util.DatabaseConnection; import java.sql.*; import java.util.ArrayList; import java.util.List; public class EmployeeRepository implements Repository <Employee>{ private Connection getConnection() throws SQLException { return DatabaseConnection.getInstance(); } @Override public List<Employee> findAll() throws SQLException{ List<Employee> employees = new ArrayList<>(); try(Statement myStand = getConnection().createStatement(); ResultSet myRes = myStand.executeQuery("SELECT * FROM employees")){ while(myRes.next()){ Employee e = createEmployee(myRes); employees.add(e); } } catch (SQLException e) { throw new SQLException(e); } return employees; } @Override public Employee getById(Integer id) throws SQLException { Employee employee = null; try(PreparedStatement myStant = getConnection().prepareStatement("SELECT * FROM employees WHERE id = ?")){ myStant.setInt(1,id); try(ResultSet myRes = myStant.executeQuery()) { if (myRes.next()){ employee = createEmployee(myRes); } } return employee; } } @Override public void save(Employee employee) { } @Override public void delete(Integer I) { } private Employee createEmployee(ResultSet myRes) throws SQLException { Employee e = new Employee(); e.setId(myRes.getInt("id")); e.setFirst_name(myRes.getString("first_name")); e.setPa_surname(myRes.getString("pa_surname")); e.setMa_surname(myRes.getString("ma_surname")); e.setEmail(myRes.getString("email")); e.setSalary(myRes.getFloat("salary")); return e; } } ```package org.example.platzi.repository; import org.example.platzi.model.Employee; import org.example.platzi.util.DatabaseConnection; import java.sql.\*; import java.util.ArrayList; import java.util.List; public class EmployeeRepository implements Repository \<Employee>{ private Connection getConnection() throws SQLException { return DatabaseConnection.*getInstance*(); } @Override public List\<Employee> findAll() throws SQLException{ List\<Employee> employees = new ArrayList<>(); try(Statement myStand = getConnection().createStatement(); ResultSet myRes = myStand.executeQuery("SELECT \* FROM employees")){ while(myRes.next()){ Employee e = createEmployee(myRes); employees.add(e); } } catch (SQLException e) { throw new SQLException(e); } return employees; } @Override public Employee getById(Integer id) throws SQLException { Employee employee = null; try(PreparedStatement myStant = getConnection().prepareStatement("SELECT \* FROM employees WHERE id = ?")){ myStant.setInt(1,id); try(ResultSet myRes = myStant.executeQuery()) { if (myRes.next()){ employee = createEmployee(myRes); } } return employee; } } @Override public void save(Employee employee) { } @Override public void delete(Integer I) { } private Employee createEmployee(ResultSet myRes) throws SQLException { Employee e = new Employee(); e.setId(myRes.getInt("id")); e.setFirst\_name(myRes.getString("first\_name")); e.setPa\_surname(myRes.getString("pa\_surname")); e.setMa\_surname(myRes.getString("ma\_surname")); e.setEmail(myRes.getString("email")); e.setSalary(myRes.getFloat("salary")); return e; } }
Excelente clase, rescato mucho las explicaciones y los tips a la hora de trabajar con el IDE
El método main me quedó directamente así: `public static void main(String[] args) throws SQLException {` ` Repository<Employee> repo = new EmployeeRepository();` ` repo.findAll().forEach(System.``out``::println);` `}` Sin necesidad del bloque try with resources (aparte resource que tenia no hacia falta)
Buena explicación, nomás recomendaría no utilizar variables nombradas con una sola letra, incluso aunque se utilice solo dentro de un método, mejor llamarle "employee" en vez de "e"
Mi main: `public static void main(String[] args) {` ` try (Connection myConn = DatabaseConnection.``getInstance``()){` ` Repository<Employee> empRepo = new EmployeeRepository();` ` System.``out``.println("Find All Employees");` ` empRepo.findAll().forEach(System.``out``::println);` ` System.``out``.println("Find one Employee by ID");` ` System.``out``.println(empRepo.findById(1));` ` }catch (SQLException e){` ` e.printStackTrace();` ` System.``out``.println("Error to connect to database!");` ` }` `}`
public String toString() { return "PERSONA{" + "\t IdPersona=" + IdPersona + ",\t NombrePersona='" + NombrePersona + '\\'' + '}'; }
`Aquí esta mi aporte : ` public String toString() { return "Employee{" + "\n id : " + id + "\n firts\_name : " + firts\_name + "\n pa\_surname : " + pa\_surname + "\n ma\_surname : " + ma\_surname + "\n email : " + email + "\n salary : " + salary + '}'; }
Necesito ayuda, resulta que cuando voy a crear un objeto tipo employee, me pide los 6 parámetros del constructor y en la clase a la profesora no se los pide :( Employee e = new Employee();

Tambien es bueno definir el mapeo de registros a objetos, en un archivo aparte como utilidad, para no hacer la implementacion por cada metodo

  • (ResultSet) ademas de recibir el nombre de la col, tambien puede recibir la posicion

	//Schema
	// ID | NAME |

	dto.setId(rs.getLong(1));
	dto.setName(rs.getString(2));

	dto.setId(rs.getLong("ID"));
	dto.setName(rs.getString("NAME"));

Me gusto mucho esta arquitectura normalmente ese patron Repository lo he visto en el mismo archivo donde se lleva acabo la definicion e implemtentacion de las capacidades, la conexion a db si no es muy practico ya que toca crear varias instancias segun donde lo vayamos a utilizar.

Preferí dejarlo de esta manera:

@Override
  public String toString() {
    return "|  ID: " + id +
            "  |  NAME: " + first_name +
            "  |  SURNAME F: " + pa_surname +
            "  |  SURNAME M: " + ma_surname +
            "  |  EMAIL: " + email +
            "  |  SALARY: " + salary + "  |";
  }

Así al menos queda de esta forma:

No es la manera mas óptima pero se entiende un poco mas.

```js while (myRes.next()) { employees.add(createEmployee(myRes)); } ```Yo hice esto para agregar la respuesta directamente a la lista de empleados

Si estaba pensando que se tendria que copiar las instruciones en cada método pero esta genial como se factorizo!