Commit 594034a7 by Patryk Czarnik

Dodatkowy program z JOINem i notatki

parent a3af00b0
- ORM (Object-Relational Mapping) - koncepcja - rekordy z bazy danych widzimy jako obiekty w naszym języku programowania
- W Javie mamy przede wszystkim rozwiązanie JPA, które ma kilka implementacji, ale istnieją tekże alternatywy, w tym dość popularne MyBatis
- JPA, Jakarta Persistence API / wcześnej Java Persistence API, potocznie "Persistence" - standard Javy określający interfejs programistyczny: adnotacje @Entity itd., interfejs EntityManage, TypedQuery itd.
- Hibernate to jest jedna z kilku (ale najważniejsza) implementacja standardu JPA. Inną działającą implementacją jest EclipseLink, uzywany m.in. przez serwer Glassfish
- Hibernate powstał wcześniej niż standard JPA, dopiero później dostosowywał się do standardu. W efekcie istnieją dwa alternatywne sposoby korzystania z Hibernate: poprzez JPA (jakarta.persistence, a wcześniej javax.persistence) lub poprzez "Hibernate API" (org.hibernate)
https://www.baeldung.com/learn-jpa-hibernate
szczególnie polecam:
https://www.baeldung.com/hibernate-save-persist-update-merge-saveorupdate
https://www.baeldung.com/jpa-hibernate-difference
package sklep.przyklady_hibernate; package sklep.programy;
import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory; import jakarta.persistence.EntityManagerFactory;
...@@ -6,7 +6,7 @@ import jakarta.persistence.Persistence; ...@@ -6,7 +6,7 @@ import jakarta.persistence.Persistence;
import jakarta.persistence.TypedQuery; import jakarta.persistence.TypedQuery;
import sklep.model.Product; import sklep.model.Product;
public class OdczytajListe_Stream { public class P05a_OdczytajWszystkie_Stream {
public static void main(String[] args) { public static void main(String[] args) {
try(EntityManagerFactory emf = Persistence.createEntityManagerFactory("sklep"); try(EntityManagerFactory emf = Persistence.createEntityManagerFactory("sklep");
......
package sklep.programy;
import java.util.Arrays;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
public class P10_ProduktyIZamowienia {
// Z obiektu Product nie ma bezpośredniego dowiązania do OrderProduct i pośrednio Order.
// Jeśli chcę uzyskać listę zamówień dla kadego produktu, mogę napisać zapytanie łączące kilka tabel
// na podobnych zasadach, jak w zwykłym SQL.
public static void main(String[] args) {
try(EntityManagerFactory emf = Persistence.createEntityManagerFactory("sklep_pu");
EntityManager em = emf.createEntityManager()) {
String queryString = """
SELECT p.productName, p.price, o.id, o.orderDate, o.customer.customerEmail, op.actualPrice, op.quantity
FROM Product p
JOIN OrderProduct op ON op.id.productId = p.id
JOIN Order o ON op.id.orderId = o.id
ORDER BY p.id, o.id
""";
em.createQuery(queryString, Object[].class).getResultStream()
.map(Arrays::toString)
.forEachOrdered(System.out::println);
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment