diff --git a/pom.xml b/pom.xml
index f6c69a8..5d8220d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,9 +25,16 @@
+
+
+
+ org.springframework.data
+ spring-data-jdbc
+ 3.2.5
@@ -37,6 +44,6 @@
test
-
+ org.apache.maven.pluginsmaven-compiler-plugin88
diff --git a/src/main/java/com/mycompany/invoice/web/entity/Invoice.java b/src/main/java/com/mycompany/invoice/web/entity/Invoice.java
index 148f1e3..d84d8d7 100644
--- a/src/main/java/com/mycompany/invoice/web/entity/Invoice.java
+++ b/src/main/java/com/mycompany/invoice/web/entity/Invoice.java
@@ -1,12 +1,23 @@
package com.mycompany.invoice.web.entity;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.relational.core.mapping.Column;
+import org.springframework.data.relational.core.mapping.Table;
+
+@Table("invoice")
public class Invoice {
/**
* ATTRIBUTS
*/
+ @Id
+ @Column("INVOICE_NUMBER")
private String number;
+
+ @Column("CUSTOMER_NAME")
private String customerName;
+
+ @Column("ORDER_NUMBER")
private String orderNumber;
/**
diff --git a/src/main/java/com/mycompany/invoice/web/repository/IInvoiceRepository.java b/src/main/java/com/mycompany/invoice/web/repository/IInvoiceRepository.java
index 4bbc075..ba22547 100644
--- a/src/main/java/com/mycompany/invoice/web/repository/IInvoiceRepository.java
+++ b/src/main/java/com/mycompany/invoice/web/repository/IInvoiceRepository.java
@@ -1,12 +1,20 @@
package com.mycompany.invoice.web.repository;
import com.mycompany.invoice.web.entity.Invoice;
+import org.springframework.data.repository.CrudRepository;
import java.util.List;
-public interface IInvoiceRepository {
+public interface IInvoiceRepository extends CrudRepository {
+ /**
+ * AVEC L'UTILISATION DE SPRING DATA JDBC
+ * IL N'EST PLUS NECESSAIRE D'AVCOIR UN REPOSITORY
+ * C'EST L'INTERFACE QUI VA ETENDRE UN CRUD REPOSITORY
+ */
+ /*
Invoice create(Invoice invoice);
List getListInvoice();
public Invoice getInvoiceByNumber(String number);
+ */
}
diff --git a/src/main/java/com/mycompany/invoice/web/repository/cache/InvoiceRepositoryCache.java b/src/main/java/com/mycompany/invoice/web/repository/cache/InvoiceRepositoryCache.java
index 5859034..04da6c4 100644
--- a/src/main/java/com/mycompany/invoice/web/repository/cache/InvoiceRepositoryCache.java
+++ b/src/main/java/com/mycompany/invoice/web/repository/cache/InvoiceRepositoryCache.java
@@ -11,6 +11,7 @@
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
//@Repository
public class InvoiceRepositoryCache implements IInvoiceRepository {
@@ -44,45 +45,66 @@ public Invoice mapRow(ResultSet rs, int rowNum) throws SQLException {
}
}
- public Invoice create(Invoice invoice){
+ @Override
+ public Invoice save(Invoice invoice){
this.invoices.add(invoice);
System.out.println("Cache : Invoice added with number " + invoice.getNumber() + " for " + invoice.getCustomerName() + ".");
return invoice;
}
- public List getListInvoice(){
+ @Override
+ public Iterable findAll(){
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Iterable findAllById(Iterable strings) {
+ throw new UnsupportedOperationException();
+ }
- // On crée des données fictives, car on a pas encore de DB
- Invoice invoice1 = new Invoice();
- invoice1.setNumber("1");
- invoice1.setCustomerName("Customer1");
+ @Override
+ public long count() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void deleteById(String s) {
+ throw new UnsupportedOperationException();
+ }
- Invoice invoice2 = new Invoice();
- invoice2.setNumber("2");
- invoice2.setCustomerName("Customer2");
- invoice2.setOrderNumber("ON_02");
+ @Override
+ public void delete(Invoice entity) {
+ throw new UnsupportedOperationException();
+ }
- // On les ajoutes à une liste qu'on va renvoyer
- List listInvoice = new ArrayList<>();
- listInvoice.add(invoice1);
- listInvoice.add(invoice2);
+ @Override
+ public void deleteAllById(Iterable extends String> strings) {
+ throw new UnsupportedOperationException();
+ }
- // On retourne les données
- return listInvoice;
+ @Override
+ public void deleteAll(Iterable extends Invoice> entities) {
+ throw new UnsupportedOperationException();
}
- public Invoice getInvoiceByNumber(String number){
+ @Override
+ public void deleteAll() {
+ throw new UnsupportedOperationException();
+ }
- System.out.println(" ----- InvoiceRepositoryCache/getInvoiceByNumber ----- ");
+ @Override
+ public Iterable saveAll(Iterable entities) {
+ throw new UnsupportedOperationException();
+ }
- // On crée des données fictives, car on a pas encore de DB
- Invoice invoice = new Invoice();
- invoice.setNumber(number);
- invoice.setCustomerName("Customer_1");
- invoice.setOrderNumber("OrderNumber_1");
+ @Override
+ public Optional findById(String number){
+ throw new UnsupportedOperationException();
+ }
- // On retourne les données
- return invoice;
+ @Override
+ public boolean existsById(String s) {
+ throw new UnsupportedOperationException();
}
/**
diff --git a/src/main/java/com/mycompany/invoice/web/repository/db/InvoiceRepositoryDB.java b/src/main/java/com/mycompany/invoice/web/repository/db/InvoiceRepositoryDB.java
index b6b5f18..767405c 100644
--- a/src/main/java/com/mycompany/invoice/web/repository/db/InvoiceRepositoryDB.java
+++ b/src/main/java/com/mycompany/invoice/web/repository/db/InvoiceRepositoryDB.java
@@ -1,166 +1,172 @@
package com.mycompany.invoice.web.repository.db;
-import com.mycompany.invoice.web.entity.Invoice;
-import com.mycompany.invoice.web.repository.IInvoiceRepository;
-import com.mycompany.invoice.web.repository.cache.InvoiceRepositoryCache;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.RowMapper;
-import org.springframework.jdbc.support.GeneratedKeyHolder;
-import org.springframework.jdbc.support.KeyHolder;
-import org.springframework.stereotype.Repository;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.List;
-
-@Repository
-public class InvoiceRepositoryDB implements IInvoiceRepository {
-
- /**
- * ATTRIBUTS
- */
- private static List invoices = new ArrayList<>();
-
- @Autowired
- private JdbcTemplate jdbcTemplate;
-
- /**
- * METHODS
- */
- private static final class InvoiceRowMapper implements RowMapper {
-
- // Redéfinir une méthode de l'interface RowMapper.
- @Override
- public Invoice mapRow(ResultSet rs, int rowNum) throws SQLException {
-
- // Création de la nouvelle facture
- Invoice invoice = new Invoice();
-
- // Ajout des attributs
- invoice.setNumber(String.valueOf(rs.getLong("INVOICE_NUMBER")));
- invoice.setCustomerName(rs.getString("CUSTOMER_NAME"));
- invoice.setOrderNumber(rs.getString("ORDER_NUMBER"));
-
- return invoice;
- }
- }
-
- // Sans DB
- /*public void create(Invoice invoice){
- this.invoices.add(invoice);
- System.out.println("DB : Invoice added with number " + invoice.getNumber() + " for " + invoice.getCustomerName() + ".");
- }*/
-
- // Avec DB Sans clé générée pas la DB en retour
- /*@Override
- public void create(Invoice invoice){
- String sql = "INSERT INTO invoice (customer_name, order_number) VALUES (?, ?)";
- jdbcTemplate.update(sql, invoice.getCustomerName(), invoice.getOrderNumber());
- }*/
-
- // Avec DB Avec clé générée par la DB en retour
- @Override
- public Invoice create(Invoice invoice) {
-
- // KeyHolder est utilisé pour capturer la clé générée par la base de données
- KeyHolder kh = new GeneratedKeyHolder();
-
- // Utilisation de JdbcTemplate pour exécuter une mise à jour (insertion)
- jdbcTemplate.update(connection -> {
-
- // Préparation de la requête SQL avec RETURN_GENERATED_KEYS pour obtenir la clé générée
- PreparedStatement ps = connection.prepareStatement(
- "INSERT INTO INVOICE(CUSTOMER_NAME, ORDER_NUMBER) VALUES (?, ?)",
- Statement.RETURN_GENERATED_KEYS
- );
- // Affectation des valeurs des paramètres à la requête préparée
- ps.setString(1, invoice.getCustomerName()); // Premier paramètre (index 1)
- ps.setString(2, invoice.getOrderNumber()); // Deuxième paramètre (index 2)
-
- // Retourne l'objet PreparedStatement pour l'exécution
- return ps;
-
- }, kh); // KeyHolder pour capturer la clé générée
-
- // Conversion de la clé générée en chaîne de caractères et l'affecte à l'attribut 'number' de l'objet Invoice
- invoice.setNumber(kh.getKey().toString());
-
- // Retourne l'objet Invoice mis à jour avec la clé générée
- return invoice;
- }
-
- // Méthode sans DB
- /*public List getListInvoice(){
-
- // On crée des données fictives, car on a pas encore de DB
- Invoice invoice1 = new Invoice();
- invoice1.setNumber("1");
- invoice1.setCustomerName("Customer1");
-
- Invoice invoice2 = new Invoice();
- invoice2.setNumber("2");
- invoice2.setCustomerName("Customer2");
-
- // On les ajoutes à une liste qu'on va renvoyer
- List listInvoice = new ArrayList<>();
- listInvoice.add(invoice1);
- listInvoice.add(invoice2);
-
- // On retourne les données
- return listInvoice;
- }*/
-
- // Méthode avec DB
- @Override
- public List getListInvoice(){
-
- System.out.println(" ----- InvoiceRepositoryDB/getListInvoice ----- ");
-
- // Requête SQL
- String sqlRequest = "SELECT * FROM invoice";
- return jdbcTemplate.query(sqlRequest,new InvoiceRowMapper());
- }
-
- // Méthode sans DB
- /*public Invoice getInvoiceByNumber(String number){
-
- System.out.println(" ----- InvoiceRepositoryDB/getInvoiceByNumber ----- ");
-
- // On crée des données fictives, car on a pas encore de DB
- Invoice invoice = new Invoice();
- invoice.setNumber(number);
- invoice.setCustomerName("Customer_1");
- invoice.setOrderNumber("OrderNumber_1");
-
- // On retourne les données
- return invoice;
- }*/
-
- // Méthode avec DB
- @Override
- public Invoice getInvoiceByNumber(String number){
-
- System.out.println(" ----- InvoiceRepositoryDB/getInvoiceByNumber ----- ");
-
- // Requête SQL
- String sqlRequest = "SELECT * FROM invoice WHERE INVOICE_NUMBER=?";
-
- // On retourne les données
- return jdbcTemplate.queryForObject(sqlRequest,new InvoiceRowMapper(), number);
- }
-
- /**
- * GETTERS/SETTERS
- */
- public static List getInvoices() {
- return invoices;
- }
-
- public static void setInvoices(List invoices) {
- InvoiceRepositoryDB.invoices = invoices;
- }
-}
+/**
+ * AVEC L'UTILISATION DE SPRING DATA JDBC
+ * IL N'EST PLUS NECESSAIRE D'AVCOIR UN REPOSITORY
+ * C'EST L'INTERFACE QUI VA ETENDRE UN CRUD REPOSITORY
+ */
+
+//import com.mycompany.invoice.web.entity.Invoice;
+//import com.mycompany.invoice.web.repository.IInvoiceRepository;
+//import com.mycompany.invoice.web.repository.cache.InvoiceRepositoryCache;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.jdbc.core.JdbcTemplate;
+//import org.springframework.jdbc.core.RowMapper;
+//import org.springframework.jdbc.support.GeneratedKeyHolder;
+//import org.springframework.jdbc.support.KeyHolder;
+//import org.springframework.stereotype.Repository;
+//
+//import java.sql.PreparedStatement;
+//import java.sql.ResultSet;
+//import java.sql.SQLException;
+//import java.sql.Statement;
+//import java.util.ArrayList;
+//import java.util.List;
+//
+//@Repository
+//public class InvoiceRepositoryDB implements IInvoiceRepository {
+//
+// /**
+// * ATTRIBUTS
+// */
+// private static List invoices = new ArrayList<>();
+//
+// @Autowired
+// private JdbcTemplate jdbcTemplate;
+//
+// /**
+// * METHODS
+// */
+// private static final class InvoiceRowMapper implements RowMapper {
+//
+// // Redéfinir une méthode de l'interface RowMapper.
+// @Override
+// public Invoice mapRow(ResultSet rs, int rowNum) throws SQLException {
+//
+// // Création de la nouvelle facture
+// Invoice invoice = new Invoice();
+//
+// // Ajout des attributs
+// invoice.setNumber(String.valueOf(rs.getLong("INVOICE_NUMBER")));
+// invoice.setCustomerName(rs.getString("CUSTOMER_NAME"));
+// invoice.setOrderNumber(rs.getString("ORDER_NUMBER"));
+//
+// return invoice;
+// }
+// }
+//
+// // Sans DB
+// /*public void create(Invoice invoice){
+// this.invoices.add(invoice);
+// System.out.println("DB : Invoice added with number " + invoice.getNumber() + " for " + invoice.getCustomerName() + ".");
+// }*/
+//
+// // Avec DB Sans clé générée pas la DB en retour
+// /*@Override
+// public void create(Invoice invoice){
+// String sql = "INSERT INTO invoice (customer_name, order_number) VALUES (?, ?)";
+// jdbcTemplate.update(sql, invoice.getCustomerName(), invoice.getOrderNumber());
+// }*/
+//
+// // Avec DB Avec clé générée par la DB en retour
+// @Override
+// public Invoice create(Invoice invoice) {
+//
+// // KeyHolder est utilisé pour capturer la clé générée par la base de données
+// KeyHolder kh = new GeneratedKeyHolder();
+//
+// // Utilisation de JdbcTemplate pour exécuter une mise à jour (insertion)
+// jdbcTemplate.update(connection -> {
+//
+// // Préparation de la requête SQL avec RETURN_GENERATED_KEYS pour obtenir la clé générée
+// PreparedStatement ps = connection.prepareStatement(
+// "INSERT INTO INVOICE(CUSTOMER_NAME, ORDER_NUMBER) VALUES (?, ?)",
+// Statement.RETURN_GENERATED_KEYS
+// );
+// // Affectation des valeurs des paramètres à la requête préparée
+// ps.setString(1, invoice.getCustomerName()); // Premier paramètre (index 1)
+// ps.setString(2, invoice.getOrderNumber()); // Deuxième paramètre (index 2)
+//
+// // Retourne l'objet PreparedStatement pour l'exécution
+// return ps;
+//
+// }, kh); // KeyHolder pour capturer la clé générée
+//
+// // Conversion de la clé générée en chaîne de caractères et l'affecte à l'attribut 'number' de l'objet Invoice
+// invoice.setNumber(kh.getKey().toString());
+//
+// // Retourne l'objet Invoice mis à jour avec la clé générée
+// return invoice;
+// }
+//
+// // Méthode sans DB
+// /*public List getListInvoice(){
+//
+// // On crée des données fictives, car on a pas encore de DB
+// Invoice invoice1 = new Invoice();
+// invoice1.setNumber("1");
+// invoice1.setCustomerName("Customer1");
+//
+// Invoice invoice2 = new Invoice();
+// invoice2.setNumber("2");
+// invoice2.setCustomerName("Customer2");
+//
+// // On les ajoutes à une liste qu'on va renvoyer
+// List listInvoice = new ArrayList<>();
+// listInvoice.add(invoice1);
+// listInvoice.add(invoice2);
+//
+// // On retourne les données
+// return listInvoice;
+// }*/
+//
+// // Méthode avec DB
+// @Override
+// public List getListInvoice(){
+//
+// System.out.println(" ----- InvoiceRepositoryDB/getListInvoice ----- ");
+//
+// // Requête SQL
+// String sqlRequest = "SELECT * FROM invoice";
+// return jdbcTemplate.query(sqlRequest,new InvoiceRowMapper());
+// }
+//
+// // Méthode sans DB
+// /*public Invoice getInvoiceByNumber(String number){
+//
+// System.out.println(" ----- InvoiceRepositoryDB/getInvoiceByNumber ----- ");
+//
+// // On crée des données fictives, car on a pas encore de DB
+// Invoice invoice = new Invoice();
+// invoice.setNumber(number);
+// invoice.setCustomerName("Customer_1");
+// invoice.setOrderNumber("OrderNumber_1");
+//
+// // On retourne les données
+// return invoice;
+// }*/
+//
+// // Méthode avec DB
+// @Override
+// public Invoice getInvoiceByNumber(String number){
+//
+// System.out.println(" ----- InvoiceRepositoryDB/getInvoiceByNumber ----- ");
+//
+// // Requête SQL
+// String sqlRequest = "SELECT * FROM invoice WHERE INVOICE_NUMBER=?";
+//
+// // On retourne les données
+// return jdbcTemplate.queryForObject(sqlRequest,new InvoiceRowMapper(), number);
+// }
+//
+// /**
+// * GETTERS/SETTERS
+// */
+// public static List getInvoices() {
+// return invoices;
+// }
+//
+// public static void setInvoices(List invoices) {
+// InvoiceRepositoryDB.invoices = invoices;
+// }
+//}
\ No newline at end of file
diff --git a/src/main/java/com/mycompany/invoice/web/service/IInvoiceService.java b/src/main/java/com/mycompany/invoice/web/service/IInvoiceService.java
index 18d2d77..222191b 100644
--- a/src/main/java/com/mycompany/invoice/web/service/IInvoiceService.java
+++ b/src/main/java/com/mycompany/invoice/web/service/IInvoiceService.java
@@ -9,7 +9,7 @@ public interface IInvoiceService{
Invoice create(Invoice invoice);
void setInvoiceRepository(IInvoiceRepository invoiceRepository);
- List getListInvoice();
+ Iterable getListInvoice();
Invoice getInvoiceByNumber(String number);
}
diff --git a/src/main/java/com/mycompany/invoice/web/service/number/InvoiceServiceNumber.java b/src/main/java/com/mycompany/invoice/web/service/number/InvoiceServiceNumber.java
index 4d29b80..837e68f 100644
--- a/src/main/java/com/mycompany/invoice/web/service/number/InvoiceServiceNumber.java
+++ b/src/main/java/com/mycompany/invoice/web/service/number/InvoiceServiceNumber.java
@@ -7,6 +7,7 @@
import org.springframework.stereotype.Service;
import java.util.List;
+import java.util.NoSuchElementException;
@Service
public class InvoiceServiceNumber implements IInvoiceService {
@@ -14,7 +15,6 @@ public class InvoiceServiceNumber implements IInvoiceService {
/**
* ATTRIBUTS
*/
- private static long lastNumber=0L;
private IInvoiceRepository invoiceRepository;
/**
@@ -30,34 +30,30 @@ public InvoiceServiceNumber(IInvoiceRepository invoiceRepository){
*/
public Invoice create(Invoice invoice){
System.out.println(" ----- InvoiceServiceNumber/create ----- ");
+ System.out.println(" ----- invoice.getNumber : " + invoice.getNumber());
+ System.out.println(" ----- invoice.getNumber : " + invoice.getCustomerName());
+ System.out.println(" ----- invoice.getOrderNumber : " + invoice.getOrderNumber());
- invoice.setNumber(String.valueOf(++this.lastNumber));
- return invoiceRepository.create(invoice);
+ return invoiceRepository.save(invoice);
}
@Override
- public List getListInvoice(){
+ public Iterable getListInvoice(){
System.out.println(" ----- InvoiceServiceNumber/getListInvoice ----- ");
- return invoiceRepository.getListInvoice();
+ return invoiceRepository.findAll();
}
@Override
public Invoice getInvoiceByNumber(String number){
System.out.println(" ----- InvoiceServiceNumber/getInvoiceByNumber ----- ");
- return invoiceRepository.getInvoiceByNumber(number);
+ return invoiceRepository.findById(number).orElseThrow(
+ () -> new NoSuchElementException("Invoice with number " + number + " not found")
+ );
}
/**
* GETTERS/SETTERS
*/
- public static long getLastNumber() {
- return lastNumber;
- }
-
- public static void setLastNumber(long lastNumber) {
- InvoiceServiceNumber.lastNumber = lastNumber;
- }
-
public IInvoiceRepository getInvoiceRepository() {
return invoiceRepository;
}
diff --git a/src/main/java/com/mycompany/invoice/web/service/prefix/InvoiceServicePrefix.java b/src/main/java/com/mycompany/invoice/web/service/prefix/InvoiceServicePrefix.java
index 937b0f1..94f627c 100644
--- a/src/main/java/com/mycompany/invoice/web/service/prefix/InvoiceServicePrefix.java
+++ b/src/main/java/com/mycompany/invoice/web/service/prefix/InvoiceServicePrefix.java
@@ -8,6 +8,7 @@
import org.springframework.stereotype.Service;
import java.util.List;
+import java.util.NoSuchElementException;
//@Service
public class InvoiceServicePrefix implements IInvoiceService {
@@ -37,16 +38,20 @@ public InvoiceServicePrefix(IInvoiceRepository invoiceRepository){
@Override
public Invoice create(Invoice invoice){
invoice.setNumber(String.valueOf(prefix + ++this.lastNumber));
- return invoiceRepository.create(invoice);
+ return invoiceRepository.save(invoice);
}
@Override
- public List getListInvoice(){
- return invoiceRepository.getListInvoice();
+ public Iterable getListInvoice(){
+ return invoiceRepository.findAll();
}
@Override
- public Invoice getInvoiceByNumber(String number){return invoiceRepository.getInvoiceByNumber(number);}
+ public Invoice getInvoiceByNumber(String number){
+ return invoiceRepository.findById(number).orElseThrow(
+ () -> new NoSuchElementException("Invoice with number " + number + " not found")
+ );
+ }
/**
diff --git a/src/main/java/com/mycompany/invoice/web/service/prefixinv/InvoiceServicePrefixINV.java b/src/main/java/com/mycompany/invoice/web/service/prefixinv/InvoiceServicePrefixINV.java
index 41dacd8..d5450c2 100644
--- a/src/main/java/com/mycompany/invoice/web/service/prefixinv/InvoiceServicePrefixINV.java
+++ b/src/main/java/com/mycompany/invoice/web/service/prefixinv/InvoiceServicePrefixINV.java
@@ -6,6 +6,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
+import java.util.NoSuchElementException;
//@Service
public class InvoiceServicePrefixINV implements IInvoiceService {
@@ -30,16 +31,20 @@ public InvoiceServicePrefixINV(IInvoiceRepository invoiceRepository){
@Override
public Invoice create(Invoice invoice){
invoice.setNumber(String.valueOf("INV_" + ++this.lastNumber));
- return invoiceRepository.create(invoice);
+ return invoiceRepository.save(invoice);
}
@Override
- public List getListInvoice(){
- return invoiceRepository.getListInvoice();
+ public Iterable getListInvoice(){
+ return invoiceRepository.findAll();
}
@Override
- public Invoice getInvoiceByNumber(String number){return invoiceRepository.getInvoiceByNumber(number);}
+ public Invoice getInvoiceByNumber(String number){
+ return invoiceRepository.findById(number).orElseThrow(
+ () -> new NoSuchElementException("Invoice with number " + number + " not found")
+ );
+ }
/**
* GETTERS/SETTERS