# Le CRUD avec JDBC Après avoir ajouté le driver mysql (```mysql-connector-java```) à notre pom.xml, nous créons : #### 1) L'interface #### 2) L'entité #### 3) Le Repository Créer un repository au nom de l'entité qui recevra les méthodes du CRUD, Exemple : ``` /** * On créé un fichier personRepo.java dans lequel on initialisera les * méthodes du CRUD. * * personRepo.java */ /** * On importe l'entité Person qui se trouve dans le package "entity". */ import proj.simplon.co.promo16.entity.Person; /** * On implémente à notre classe personRepo l'interface IPersonRepository<Person> * et ses méthodes. */ public class PersonRepo implements IRepository<Person> { // Cette propriété recevra l'url de connexion à notre base de données private Connection connection; /* On génère un constructeur pour assigner l'url de connexion à la bdd à notre propriété connection */ public PersonRepo() { try { connection = DriverManager.getConnection("jdbc:mysql://simplon:1234@localhost:3306/allodocdb"); } catch (SQLException e) { e.printStackTrace(); } } /** * Retourne toutes les personnes. * @Override */ public List<Person> findAll() { try { // 1) On prépare la requête. PreparedStatement stmt = connection.prepareStatement("SELECT * FROM person"); // 2) On l'execute ResultSet result = stmt.executeQuery(); // 3) On créer une liste qui recevra le résultat de la requête. List<Person> personList = new ArrayList<>(); // 4) On parcours les résultats while (result.next()) { // 5) On "get" les données des propriétés Person person = new Person( result.getInt("person_id"), result.getString("first_name"), result.getString("last_name")); // 6) On ajoute les données à la liste personList.add(person); } // 7) On retourne la liste return personList; } catch (SQLException e) { e.printStackTrace(); } return null; } /** * Affiche une personne en fonction de son id. * @Override */ public Person findById(Integer id) { try { /** Pour des raisons de sécurité, notre id sera égal à un point * d'interrogation dans notre requête. */ PreparedStatement stmt = connection.prepareStatement("SELECT * FROM person WHERE person_id= ?"); // C'est ici que nous faisons référence à l'id. stmt.setInt(1, id); // On execute la requête ResultSet result = stmt.executeQuery(); // Pas de boucle si nous recherchons quelque chose par l'id. if (result.next()) { // Même chose que pour le findAll(). return new Person( result.getInt("person_id"), result.getString("first_name"), result.getString("last_name")); } } catch (SQLException e) { } return null; } /** * Suprime une personne par l'id. * @Override */ public boolean deleteById(Integer id) { try { PreparedStatement stmt = connection.prepareStatement("DELETE FROM person WHERE person_id=?"); stmt.setInt(1, id); return stmt.executeUpdate() == 1; } catch (SQLException e) { e.printStackTrace(); } return false; } /** * Enregistre une personne. * @Override */ public boolean save(Person entity) { try { if (entity.getId() != null) { return update(entity); } PreparedStatement stmt = connection.prepareStatement( "INSERT INTO person (first_name,last_name) VALUES (?,?)", PreparedStatement.RETURN_GENERATED_KEYS ); stmt.setString(1, entity.getFirstName()); stmt.setString(2, entity.getLastName()); // Si une seule ligne est affectée, if (stmt.executeUpdate() == 1) { // Tu génères un id. ResultSet result = stmt.getGeneratedKeys(); result.next(); entity.setId(result.getInt(1)); return true; } } catch (SQLException e) { e.printStackTrace(); } return false; } @Override public boolean update(Person entity) { try { PreparedStatement stmt = connection.prepareStatement("UPDATE person SET first_name=?,last_name= ? WHERE person_id=?"); stmt.setString(1, entity.getFirstName()); stmt.setString(2, entity.getLastName()); stmt.setInt(3, entity.getId()); return stmt.executeUpdate() == 1; } catch (SQLException e) { e.printStackTrace(); } return false; } } ``` ###### tags: `JDBC`