Commit 6b196884 by Patryk Czarnik

JPQL i listy

parent ea24d192
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
<property name="javax.persistence.jdbc.password" value="abc123"/> <property name="javax.persistence.jdbc.password" value="abc123"/>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/> <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="hibernate.show_sql" value="true"/> <property name="hibernate.show_sql" value="true"/>
<!-- To będzie pokazywać kody SQL -->
</properties> </properties>
</persistence-unit> </persistence-unit>
</persistence> </persistence>
...@@ -4,27 +4,37 @@ import java.io.Serializable; ...@@ -4,27 +4,37 @@ import java.io.Serializable;
import javax.persistence.*; import javax.persistence.*;
import java.math.BigDecimal; import java.math.BigDecimal;
/** /**
* The persistent class for the products database table. * The persistent class for the products database table.
* *
*/ */
/*
* Sposób na zapisanie kilku named queries w starszych wersjach Javy (tylko nie wiem jakich ;-) )
*
* @NamedQueries({
* @NamedQuery(name="Product.findAll", query="SELECT p FROM Product p"),
* @NamedQuery(name="Product.sredniaCena", query="SELECT avg(p.price) FROM Product p"),
* })
*/
@Entity @Entity
@Table(name="products") @Table(name = "products")
@NamedQuery(name="Product.findAll", query="SELECT p FROM Product p") @NamedQuery(name = "Product.findAll", query = "SELECT p FROM Product p")
@NamedQuery(name = "Product.sredniaCena", query = "SELECT avg(p.price) FROM Product p")
public class Product implements Serializable { public class Product implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Id @Id
@GeneratedValue(strategy=GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="product_id", insertable=false, updatable=false) @Column(name = "product_id", insertable = false, updatable = false)
private Integer productId; private Integer productId;
private String description; private String description;
private BigDecimal price; private BigDecimal price;
@Column(name="product_name") @Column(name = "product_name")
private String productName; private String productName;
private BigDecimal vat; private BigDecimal vat;
......
package sklep.przyklady;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;
import sklep.model.Product;
public class OdczytajWszystkieProdukty1_JPQL {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("sklep");
EntityManager em = emf.createEntityManager();
// Chcemy wypisać wszystkie produkty.
// W tej wersji zadamy odpowiednie zapytania JPQL
// JPQL = Java Persistence Query Language (czasami mówi się też HQL - Hibernate Q.L.)
// Język wzorowany na SQL, ale:
// - interpretowany przez Hibernate'a (lub inną implementację JPA) po stronie Javy, a nie przez serwer SQL
// - zamiast nazw tabel i kolumn używamy nazw klas i pól
TypedQuery<Product> query = em.createQuery("SELECT p FROM Product p ORDER BY p.productId", Product.class);
List<Product> products = query.getResultList();
System.out.println("Odczytano " + products.size() + " rekordów.");
for (Product product : products) {
System.out.println(" * " + product.getProductName() + " za cenę " + product.getPrice() + ", opis: " + product.getDescription());
}
em.close();
emf.close();
}
}
package sklep.przyklady;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;
import sklep.model.Product;
public class OdczytajWszystkieProdukty2_NamedQuery {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("sklep");
EntityManager em = emf.createEntityManager();
// Chcemy wypisać wszystkie produkty.
// W tej wersji skorzystamy z gotowego "named query".
TypedQuery<Product> query = em.createNamedQuery("Product.findAll", Product.class);
List<Product> products = query.getResultList();
System.out.println("Odczytano " + products.size() + " rekordów.");
for (Product product : products) {
System.out.println(" * " + product.getProductName() + " za cenę " + product.getPrice() + ", opis: " + product.getDescription());
}
em.close();
emf.close();
}
}
package sklep.przyklady;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;
import sklep.model.Product;
public class OdczytajWszystkieProdukty3_Stream {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("sklep");
EntityManager em = emf.createEntityManager();
// W tej wersji wyniki zapytania odczytamy nie jako listę, tylko jako strumień.
// Dzięki temu nie czytamy wszystkich rekordów na raz i możemy przetwarzać nawet duże tabele.
TypedQuery<Product> query = em.createNamedQuery("Product.findAll", Product.class);
query.getResultStream().forEach(product -> {
System.out.println(" * " + product.getProductName() + " za cenę " + product.getPrice() + ", opis: " + product.getDescription());
});
em.close();
emf.close();
}
}
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