Commit b45b3907 by Patryk Czarnik

Odczyty wszystkich rekordów

parent d053c221
...@@ -29,7 +29,7 @@ abstract class AbstractEntity { ...@@ -29,7 +29,7 @@ abstract class AbstractEntity {
} }
Object value = ""; Object value = "";
if(Collection.class.isAssignableFrom(field.getType())) { if(Collection.class.isAssignableFrom(field.getType())) {
value = "[]"; value = "[]";
} else if(field.trySetAccessible()) { } else if(field.trySetAccessible()) {
value = field.get(this); value = field.get(this);
} else { } else {
......
...@@ -7,6 +7,11 @@ import java.time.LocalDate; ...@@ -7,6 +7,11 @@ import java.time.LocalDate;
@Entity @Entity
@Table(name = "employees") @Table(name = "employees")
@NamedQueries({
@NamedQuery(name="Employee.findAll", query="SELECT e FROM Employee e ORDER BY e.id"),
@NamedQuery(name="Employee.findByLastName", query="SELECT e FROM Employee e WHERE e.lastName = :lastName ORDER BY e.id"),
})
public class Employee extends AbstractEntity { public class Employee extends AbstractEntity {
@Id @Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "employees_id_gen") @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "employees_id_gen")
......
...@@ -5,6 +5,7 @@ import org.hibernate.annotations.ColumnDefault; ...@@ -5,6 +5,7 @@ import org.hibernate.annotations.ColumnDefault;
@Entity @Entity
@Table(name = "locations") @Table(name = "locations")
@NamedQuery(name = "Location.findAll", query = "SELECT loc FROM Location loc ORDER BY loc.country.id, loc.city")
public class Location extends AbstractEntity { public class Location extends AbstractEntity {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
...@@ -24,7 +25,7 @@ public class Location extends AbstractEntity { ...@@ -24,7 +25,7 @@ public class Location extends AbstractEntity {
@Column(name = "state_province", length = 25) @Column(name = "state_province", length = 25)
private String stateProvince; private String stateProvince;
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne
@JoinColumn(name = "country_id") @JoinColumn(name = "country_id")
private Country country; private Country country;
......
...@@ -16,11 +16,12 @@ public class P1_OdczytajPracownika { ...@@ -16,11 +16,12 @@ public class P1_OdczytajPracownika {
EntityManager em = emf.createEntityManager()) { EntityManager em = emf.createEntityManager()) {
while(true) { while(true) {
System.out.print("Podaj id pracownika: "); System.out.print("\nPodaj id pracownika: ");
int id = sc.nextInt(); int id = sc.nextInt();
if(id < 0) break; if(id < 0) break;
Employee employee = em.find(Employee.class, id); Employee employee = em.find(Employee.class, id);
System.out.println(employee); System.out.println(employee);
System.out.println();
// w przypadku braku takiego obiektu wynikiem jest null // w przypadku braku takiego obiektu wynikiem jest null
if(employee != null) { if(employee != null) {
System.out.println(employee.getFirstName() System.out.println(employee.getFirstName()
...@@ -29,7 +30,6 @@ public class P1_OdczytajPracownika { ...@@ -29,7 +30,6 @@ public class P1_OdczytajPracownika {
System.out.println("Job: " + job + " " + job.getJobId() + " = " + job.getJobTitle()); System.out.println("Job: " + job + " " + job.getJobId() + " = " + job.getJobTitle());
Department dep = employee.getDepartment(); Department dep = employee.getDepartment();
if(dep != null) { if(dep != null) {
System.out.println("a kuku");
System.out.println("Klasa obiektu Department: " + dep.getClass().getName()); System.out.println("Klasa obiektu Department: " + dep.getClass().getName());
// w przypadku zależności LAZY, dopiero teraz zostaną wczytane szczegóły departamentu // w przypadku zależności LAZY, dopiero teraz zostaną wczytane szczegóły departamentu
System.out.println("Department: " + dep.getDepartmentName()); System.out.println("Department: " + dep.getDepartmentName());
......
package przyklady;
import hr.model.Department;
import hr.model.Employee;
import hr.model.Job;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.TypedQuery;
import java.util.List;
import java.util.Scanner;
public class P2_OdczytajWszystkich_JPQL {
public static void main(String[] args) {
try(EntityManagerFactory emf = Persistence.createEntityManagerFactory("hr");
EntityManager em = emf.createEntityManager()) {
// JPQL = Jakarta Persistence Query Language
// Jak SQL, ale na poziomie obiektów, z pewnymi różnicami i ograniczeniami.
TypedQuery<Employee> query = em.createQuery("SELECT e FROM Employee e", Employee.class);
List<Employee> employees = query.getResultList();
System.out.println("Odczytano " + employees.size() + " rekordów.");
for(Employee employee : employees) {
System.out.println(employee.getFirstName() + " " + employee.getLastName()
+ " (" + employee.getJob().getJobTitle() + "): " + employee.getSalary());
}
}
}
}
package przyklady;
import hr.model.Employee;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.TypedQuery;
import java.util.List;
public class P3_OdczytajWszystkich_NamedQuery {
public static void main(String[] args) {
try(EntityManagerFactory emf = Persistence.createEntityManagerFactory("hr");
EntityManager em = emf.createEntityManager()) {
TypedQuery<Employee> query = em.createNamedQuery("Employee.findAll", Employee.class);
List<Employee> employees = query.getResultList();
System.out.println("Odczytano " + employees.size() + " rekordów.");
for(Employee employee : employees) {
System.out.println(employee.getFirstName() + " " + employee.getLastName()
+ " (" + employee.getJob().getJobTitle() + "): " + employee.getSalary());
}
}
}
}
package przyklady;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import hr.model.Location;
public class P4_OdczytajWszystkich_Stream {
public static void main(String[] args) {
// Zapis z użyciem strumienia może dać lepszą wydajność. Zwróć uwagę na kolejność wykonywania dodatkowych selectów
try(EntityManagerFactory emf = Persistence.createEntityManagerFactory("hr");
EntityManager em = emf.createEntityManager()) {
em.createNamedQuery("Location.findAll", Location.class)
.getResultStream()
.map(loc -> String.format(" - %s, %s %s, %s", loc.getStreetAddress(), loc.getPostalCode(), loc.getCity(),
loc.getCountry().getCountryName()))
.forEach(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