Programación

1º DAM/DAW - Curso 2023-2024

User Tools

Site Tools


apuntes:dao

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
apuntes:dao [2023/06/04 21:04] Santiago Faciapuntes:dao [2023/10/21 11:47] (current) – [Patrón DAO] Santiago Faci
Line 3: Line 3:
 ===== Patrón DAO ===== ===== Patrón DAO =====
  
 +<file java Database.java>
 +public class Database {
 +
 +  private Connection connection;
 +
 +  public Connection getConnection() {
 +    try {
 +      Class.forName(MYSQL_DRIVER);
 +      connection = DriverManager.getConnection(MYSQL_URL, USERNAME, PASSWORD);
 +      System.out.println("Conectado!");
 +    } catch (ClassNotFoundException cnfe) {
 +      System.out.println("No se ha podido cargar el driver de conexión. Verifique que los drivers están disponibles");
 +      cnfe.printStackTrace();
 +    } catch (SQLException sqle) {
 +      System.out.println("No se ha podido conectar con el servidor de base de datos. Comprueba que los datos son correctos y que el servidor se ha iniciado");
 +      sqle.printStackTrace();
 +    }
 +
 +    return connection;
 +  }
 +
 +  public void close() {
 +    try {
 +      connection.close();
 +    } catch (SQLException sqle) {
 +      System.out.println("No se ha podido conectar con el servidor de base de datos. Comprueba que los datos son correctos y que el servidor se ha iniciado");
 +      sqle.printStackTrace();
 +    }
 +  }
 +}
 +</file>
 +
 +<file java BookDao.java>
 +public class BookDao {
 +
 +  private Connection connection;
 +
 +  public BookDao(Connection connection) {
 +    this.connection = connection;
 +  }
 +
 +  public void add(Book book) {
 +    String sql = "INSERT INTO books (title, author, publisher) VALUES (?, ?, ?)";
 +    try {
 +      PreparedStatement statement = connection.prepareStatement(sql);
 +      statement.setString(1, book.getTitle());
 +      statement.setString(2, book.getAuthor());
 +      statement.setString(3, book.getPublisher());
 +      statement.executeUpdate();
 +    } catch (SQLException sqle) {
 +      System.out.println("No se ha podido conectar con el servidor de base de datos. Comprueba que los datos son correctos y que el servidor se ha iniciado");
 +      sqle.printStackTrace();
 +    }
 +  }
 +
 +  public boolean delete(String title) {
 +    String sql = "DELETE FROM books WHERE title = ?";
 +    try {
 +      PreparedStatement statement = connection.prepareStatement(sql);
 +      statement.setString(1, title);
 +      int rows = statement.executeUpdate();
 +
 +      return rows == 1;
 +    } catch (SQLException sqle) {
 +      System.out.println("No se ha podido conectar con el servidor de base de datos. Comprueba que los datos son correctos y que el servidor se ha iniciado");
 +      sqle.printStackTrace();
 +    }
 +
 +    return false;
 +  }
 +
 +  public boolean modify(String title, Book book) {
 +    String sql = "UPDATE books SET title = ?, author = ?, publisher = ? WHERE title = ?";
 +    try {
 +      PreparedStatement statement = connection.prepareStatement(sql);
 +      statement.setString(1, book.getTitle());
 +      statement.setString(2, book.getAuthor());
 +      statement.setString(3, book.getPublisher());
 +      statement.setString(4, title);
 +      int rows = statement.executeUpdate();
 +      return rows == 1;
 +    } catch (SQLException sqle) {
 +       System.out.println("No se ha podido conectar con el servidor de base de datos. Comprueba que los datos son correctos y que el servidor se ha iniciado");
 +      sqle.printStackTrace();
 +        }
 +
 +        return false;
 +    }
 +
 +    public ArrayList<Book> findAll() {
 +        String sql = "SELECT * FROM books ORDER BY title";
 +        ArrayList<Book> books = new ArrayList<>();
 +        try {
 +            PreparedStatement statement = connection.prepareStatement(sql);
 +            ResultSet resultSet = statement.executeQuery();
 +            while (resultSet.next()) {
 +                Book book = new Book();
 +                book.setTitle(resultSet.getString("title"));
 +                book.setAuthor(resultSet.getString("author"));
 +                book.setPublisher(resultSet.getString("publisher"));
 +                books.add(book);
 +            }
 +        } catch (SQLException sqle) {
 +            System.out.println("No se ha podido conectar con el servidor de base de datos. Comprueba que los datos son correctos y que el servidor se ha iniciado");
 +            sqle.printStackTrace();
 +        }
 +
 +        return books;
 +    }
 +
 +    public Book findByTitle(String title) {
 +        String sql = "SELECT * FROM books WHERE title = ?";
 +        Book book = null;
 +
 +        try {
 +            PreparedStatement statement = connection.prepareStatement(sql);
 +            statement.setString(1, title);
 +            ResultSet resultSet = statement.executeQuery();
 +            if (resultSet.next()) {
 +                book = new Book();
 +                book.setTitle(resultSet.getString("title"));
 +                book.setAuthor(resultSet.getString("author"));
 +                book.setPublisher(resultSet.getString("publisher"));
 +            }
 +        } catch (SQLException sqle) {
 +            System.out.println("No se ha podido conectar con el servidor de base de datos. Comprueba que los datos son correctos y que el servidor se ha iniciado");
 +            sqle.printStackTrace();
 +        }
 +
 +        return book;
 +    }
 +}
 +</file>
 ===== Librería Jdbi 3 ===== ===== Librería Jdbi 3 =====
 +
 +{{ jdbi.png }}
  
 ==== Creación de un DAO con Jdbi ==== ==== Creación de un DAO con Jdbi ====
 +
 +<code java>
 +@Data
 +@RequiredArgsConstructor
 +@AllArgsConstructor
 +@NoArgsConstructor
 +@ToString
 +public class Vehicle {
 +
 +  private int id;
 +  @NonNull
 +  private String licensePlate;
 +  @NonNull
 +  private String brand;
 +  @NonNull
 +  private String model;
 +  @NonNull
 +  private int kilometers;
 +  @NonNull
 +  private String image;
 +  @NonNull
 +  private LocalDate registrationDate;
 +}
 +</code>
 +
 +<code java>
 +public class Database {
 +
 +  public static Jdbi jdbi;
 +  public static Handle db;
 +
 +  public static void connect() {
 +    jdbi = Jdbi.create(DATABASE_URL, DATABASE_USERNAME, DATABASE_PASSWORD);
 +    jdbi.installPlugin(new SqlObjectPlugin());
 +    db = jdbi.open();
 +  }
 +
 +  public static void close() {
 +    db.close();
 +  }
 +}
 +</code>
 +
 +<code java>
 +public interface VehicleDAO {
 +
 +  @SqlQuery("SELECT * FROM vehicles")
 +  @UseRowMapper(VehicleMapper.class)
 +  List<Vehicle> getVehicles();
 +
 +  @SqlQuery("SELECT * FROM vehicles WHERE brand = ? OR model = ?")
 +  @UseRowMapper(VehicleMapper.class)
 +  List<Vehicle> getVehicles(String search);
 +
 +  @SqlQuery("SELECT * FROM vehicles WHERE brand = ? AND model = ?")
 +  @UseRowMapper(VehicleMapper.class)
 +  List<Vehicle> getVehicles(String brand, String model);
 +
 +  @SqlQuery("SELECT * FROM vehicles WHERE id = ?")
 +  @UseRowMapper(VehicleMapper.class)
 +  Vehicle getVehicle(int id);
 +
 +  @SqlUpdate("INSERT INTO vehicles (license_plate, brand, model, kilometers, image, registration_date) VALUES (?, ?, ?, ?, ?, ?)")
 +  void addVehicle(String licensePlate, String brand, String model, int kilometers, String image, Date registrationDate);
 +
 +  @SqlUpdate("DELETE FROM vehicles WHERE id = ?")
 +  void removeVehicle(int id);
 +
 +  @SqlUpdate("UPDATE vehicles SET license_plate = ?, brand = ?, model = ?, kilometers = ?, image = ? WHERE id = ?")
 +  void editVehicle(String licensePlate, String brand, String model, int kilometers, String image, int id);
 +
 +  @SqlUpdate("UPDATE vehicles SET license_plate = ?, brand = ?, model = ?, kilometers = ? WHERE id = ?")
 +  void editVehicle(String licensePlate, String brand, String model, int kilometers, int id);
 +}
 +</code>
 +
 +<code java>
 +public class VehicleMapper implements RowMapper<Vehicle> {
 +
 +  @Override
 +  public Vehicle map(ResultSet rs, StatementContext ctx) throws SQLException {
 +    return new Vehicle(rs.getInt("id"),
 +        rs.getString("license_plate"),
 +        rs.getString("brand"),
 +        rs.getString("model"),
 +        rs.getInt("kilometers"),
 +        rs.getString("image"),
 +        DateUtils.getLocalDate(rs.getDate("registration_date"))
 +    );
 +  }
 +}
 +</code>
 +
 +----
 +
 +(c) 2023 Santiago Faci
apuntes/dao.1685912694.txt.gz · Last modified: 2023/06/04 21:04 by Santiago Faci