# 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`