Commit 7d444d1a by Patryk Czarnik

Gotowe przykłady JPA/Hibernate

parent 3e3c85d8
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
\ No newline at end of file
package hr.dto;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Objects;
public class AdressInfo {
private int employeeId;
private String firstName, lastName;
private String jobTitle;
private BigDecimal salary;
private LocalDate hireDate;
private String departmentName;
private String streetAddress;
private String postalCode;
private String city;
private String country;
public AdressInfo() {
}
public AdressInfo(int employeeId, String firstName, String lastName, String jobTitle, BigDecimal salary,
LocalDate hireDate, String departmentName, String streetAddress, String postalCode, String city,
String country) {
this.employeeId = employeeId;
this.firstName = firstName;
this.lastName = lastName;
this.jobTitle = jobTitle;
this.salary = salary;
this.hireDate = hireDate;
this.departmentName = departmentName;
this.streetAddress = streetAddress;
this.postalCode = postalCode;
this.city = city;
this.country = country;
}
public int getEmployeeId() {
return employeeId;
}
public void setEmployeeId(int employeeId) {
this.employeeId = employeeId;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getJobTitle() {
return jobTitle;
}
public void setJobTitle(String jobTitle) {
this.jobTitle = jobTitle;
}
public BigDecimal getSalary() {
return salary;
}
public void setSalary(BigDecimal salary) {
this.salary = salary;
}
public LocalDate getHireDate() {
return hireDate;
}
public void setHireDate(LocalDate hireDate) {
this.hireDate = hireDate;
}
public String getDepartmentName() {
return departmentName;
}
public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
}
public String getStreetAddress() {
return streetAddress;
}
public void setStreetAddress(String streetAddress) {
this.streetAddress = streetAddress;
}
public String getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
@Override
public String toString() {
return "AdressInfo [employeeId=" + employeeId + ", firstName=" + firstName + ", lastName=" + lastName
+ ", jobTitle=" + jobTitle + ", salary=" + salary + ", hireDate=" + hireDate + ", departmentName="
+ departmentName + ", streetAddress=" + streetAddress + ", postalCode=" + postalCode + ", city=" + city
+ ", country=" + country + "]";
}
@Override
public int hashCode() {
return Objects.hash(city, country, departmentName, employeeId, firstName, hireDate, jobTitle, lastName,
postalCode, salary, streetAddress);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AdressInfo other = (AdressInfo) obj;
return Objects.equals(city, other.city) && Objects.equals(country, other.country)
&& Objects.equals(departmentName, other.departmentName) && employeeId == other.employeeId
&& Objects.equals(firstName, other.firstName) && Objects.equals(hireDate, other.hireDate)
&& Objects.equals(jobTitle, other.jobTitle) && Objects.equals(lastName, other.lastName)
&& Objects.equals(postalCode, other.postalCode) && Objects.equals(salary, other.salary)
&& Objects.equals(streetAddress, other.streetAddress);
}
}
package hr.dto;
import java.math.BigDecimal;
import java.util.Objects;
public class MiniEmp {
private String firstName, lastName;
private String jobTitle;
private BigDecimal salary;
public MiniEmp() {
}
public MiniEmp(String firstName, String lastName, String jobTitle, BigDecimal salary) {
this.firstName = firstName;
this.lastName = lastName;
this.jobTitle = jobTitle;
this.salary = salary;
//System.out.println("salary YES");
}
public MiniEmp(String firstName, String lastName, String jobTitle) {
this.firstName = firstName;
this.lastName = lastName;
this.jobTitle = jobTitle;
//System.out.println("salary NO");
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getJobTitle() {
return jobTitle;
}
public void setJobTitle(String jobTitle) {
this.jobTitle = jobTitle;
}
public BigDecimal getSalary() {
return salary;
}
public void setSalary(BigDecimal salary) {
this.salary = salary;
}
@Override
public String toString() {
return "MiniEmp [firstName=" + firstName + ", lastName=" + lastName
+ ", jobTitle=" + jobTitle + ", salary=" + salary + "]";
}
@Override
public int hashCode() {
return Objects.hash(firstName, jobTitle, lastName, salary);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MiniEmp other = (MiniEmp) obj;
return Objects.equals(firstName, other.firstName)
&& Objects.equals(jobTitle, other.jobTitle) && Objects.equals(lastName, other.lastName)
&& Objects.equals(salary, other.salary);
}
}
package hr.dto;
import java.math.BigDecimal;
import java.util.Locale;
import java.util.Objects;
import jakarta.persistence.*;
@Entity
public class PracownikWDepartamencie {
@Id
private int id;
private String departmentName, firstName, lastName, jobTitle;
private BigDecimal salary, depAvg;
private int depPos, globalPos;
public PracownikWDepartamencie() {
}
public PracownikWDepartamencie(int id, String departmentName, String firstName, String lastName, String jobTitle,
BigDecimal salary, BigDecimal depAvg, int depPos, int globalPos) {
this.id = id;
this.departmentName = departmentName;
this.firstName = firstName;
this.lastName = lastName;
this.jobTitle = jobTitle;
this.salary = salary;
this.depAvg = depAvg;
this.depPos = depPos;
this.globalPos = globalPos;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDepartmentName() {
return departmentName;
}
public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getJobTitle() {
return jobTitle;
}
public void setJobTitle(String jobTitle) {
this.jobTitle = jobTitle;
}
public BigDecimal getSalary() {
return salary;
}
public void setSalary(BigDecimal salary) {
this.salary = salary;
}
public BigDecimal getDepAvg() {
return depAvg;
}
public void setDepAvg(BigDecimal depAvg) {
this.depAvg = depAvg;
}
public int getDepPos() {
return depPos;
}
public void setDepPos(int depPos) {
this.depPos = depPos;
}
public int getGlobalPos() {
return globalPos;
}
public void setGlobalPos(int globalPos) {
this.globalPos = globalPos;
}
@Override
public String toString() {
return "PracownikWDepartamencie [id=" + id + ", departmentName=" + departmentName + ", firstName=" + firstName
+ ", lastName=" + lastName + ", jobTitle=" + jobTitle + ", salary=" + salary + ", depAvg=" + depAvg
+ ", depPos=" + depPos + ", globalPos=" + globalPos + "]";
}
@Override
public int hashCode() {
return Objects.hash(depAvg, depPos, departmentName, firstName, globalPos, id, jobTitle, lastName, salary);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
PracownikWDepartamencie other = (PracownikWDepartamencie) obj;
return Objects.equals(depAvg, other.depAvg) && depPos == other.depPos
&& Objects.equals(departmentName, other.departmentName) && Objects.equals(firstName, other.firstName)
&& globalPos == other.globalPos && id == other.id && Objects.equals(jobTitle, other.jobTitle)
&& Objects.equals(lastName, other.lastName) && Objects.equals(salary, other.salary);
}
public String dajInfo() {
return String.format(Locale.US, "%3d | %-12s %-12s %-33s | %8.2f | %-20s | %8.2f | %2d | %3d |",
id, firstName, lastName, "("+jobTitle+")", salary, departmentName, depAvg, depPos, globalPos);
}
public static String naglowek() {
return String.format(Locale.US, " id | pracownik | pensja | departament | średnia | nr | nr g|");
}
}
package hr.gotowe;
import java.util.List;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.TypedQuery;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Root;
import hr.model.Employee;
public class Criteria1 {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hr");
EntityManager em = emf.createEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Employee> cq = cb.createQuery(Employee.class); // typ wyniku
Root<Employee> root = cq.from(Employee.class); // tabela źródłowa
cq.select(root);
TypedQuery<Employee> query = em.createQuery(cq);
List<Employee> lista = query.getResultList();
System.out.println("Odczytano " + lista.size() + " rekordów.");
for (Employee emp : lista) {
System.out.printf("%-15s %-15s %8s %s\n", emp.getFirstName(), emp.getLastName(),
emp.getSalary(), emp.getJob().getJobTitle());
}
em.close();
emf.close();
}
}
package hr.gotowe;
import java.math.BigDecimal;
import java.util.List;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.TypedQuery;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Root;
import hr.model.Employee;
public class Criteria2 {
public static void main(String[] args) {
BigDecimal minSalary = new BigDecimal(10000);
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hr");
EntityManager em = emf.createEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
// podajmey klasę dla wyników
CriteriaQuery<Employee> cq = cb.createQuery(Employee.class);
// podajemy encję / tabelę źródłową, od której zapytanie startuje
Root<Employee> root = cq.from(Employee.class);
// tak jakby dopisywanie kolejnych fragmentów zapytania
cq.select(root);
cq.where(cb.ge(root.get("salary"), minSalary));
cq.orderBy(cb.desc(root.get("salary")));
// Tutaj zastosowałem tworzenie kryteriów "dynamicznie" na podstawie nazw kolumn
// Istnieje też możliwość wygenerowanie "metamodelu" i posługiwania się nim
TypedQuery<Employee> query = em.createQuery(cq);
List<Employee> lista = query.getResultList();
System.out.println("Odczytano " + lista.size() + " rekordów.");
for (Employee emp : lista) {
System.out.printf("%-15s %-15s %8s %s\n", emp.getFirstName(), emp.getLastName(),
emp.getSalary(), emp.getJob().getJobTitle());
}
em.close();
emf.close();
}
}
package hr.gotowe;
import java.math.BigDecimal;
import java.util.List;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.TypedQuery;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Root;
import hr.model.Employee;
public class Criteria3 {
public static void main(String[] args) {
BigDecimal minSalary = new BigDecimal(4000);
String szukaneMiasto = "Seattle";
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hr");
EntityManager em = emf.createEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Employee> cq = cb.createQuery(Employee.class);
Root<Employee> root = cq.from(Employee.class);
cq.select(root);
cq.where(cb.and(cb.ge(root.get("salary"), minSalary),
cb.equal(root.get("department").get("location").get("city"), szukaneMiasto)));
cq.orderBy(cb.desc(root.get("salary")));
TypedQuery<Employee> query = em.createQuery(cq);
List<Employee> lista = query.getResultList();
System.out.println("Odczytano " + lista.size() + " rekordów.");
for (Employee emp : lista) {
String miasto = emp.getDepartment() == null ? "-" : emp.getDepartment().getLocation().getCity();
System.out.printf("%-15s %-15s %-10s %8s %s\n", emp.getFirstName(), emp.getLastName(),
miasto, emp.getSalary(), emp.getJob().getJobTitle());
}
em.close();
emf.close();
}
}
package hr.gotowe;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import hr.model.Employee;
public class Odczyt01_JedenRekord {
public static void main(String[] args) {
System.out.println("Początek");
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hr");
EntityManager em = emf.createEntityManager();
System.out.println("Udało się połączyć, em = " + em);
Employee emp = em.find(Employee.class, 100);
if(emp == null) {
System.out.println("nie znaleziono");
} else {
System.out.println(emp.getFirstName() + " " + emp.getLastName());
}
em.close();
emf.close();
}
}
package hr.gotowe;
import java.util.Scanner;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import hr.model.Department;
import hr.model.Employee;
public class Odczyt02_JedenRekord_InneTabele {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("hr");
em = emf.createEntityManager();
System.out.println("Udało się połączyć, em = " + em);
while(true) {
System.out.print("Podaj id pracownika: ");
if(!sc.hasNextInt())
break;
int id = sc.nextInt();
Employee emp = em.find(Employee.class, id);
if(emp == null) {
System.out.println("nie znaleziono");
} else {
System.out.println(emp.getFirstName() + " " + emp.getLastName() + " $" + emp.getSalary());
System.out.println("job: " + emp.getJob().getJobTitle());
Department department = emp.getDepartment();
if (department != null) {
System.out.println("departament: " + department.getDepartmentName());
System.out.println("adres: " + department.getLocation().getStreetAddress() + " "
+ department.getLocation().getCity() + " "
+ department.getLocation().getCountry().getCountryName());
}
System.out.println();
}
}
} finally {
if(em != null)
em.close();
if(emf != null)
emf.close();
}
}
}
package hr.gotowe;
import java.util.List;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.TypedQuery;
import hr.model.Employee;
public class Odczyt03_WszystkieRekordy_FindAll {
public static void main(String[] args) {
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("hr");
em = emf.createEntityManager();
TypedQuery<Employee> query = em.createNamedQuery("Employee.findAll", Employee.class);
// Wczytuje wszystkie dane od razu do pamięci
List<Employee> lista = query.getResultList();
System.out.println("Ilość rekordów " + lista.size());
for (Employee employee : lista) {
System.out.println(employee.getFirstName() + " " + employee.getLastName());
}
} finally {
if (em != null)
em.close();
if (emf != null)
emf.close();
}
}
}
package hr.gotowe;
import java.util.stream.Stream;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.TypedQuery;
import hr.model.Employee;
public class Odczyt04_WszystkieRekordy_Stream {
public static void main(String[] args) {
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("hr");
em = emf.createEntityManager();
TypedQuery<Employee> query = em.createNamedQuery("Employee.findAll", Employee.class);
// Używając Stream zamiast List pobieramy dane "strumieniowo", czyli pojedynczo i przetwarzamy na bieżąco.
Stream<Employee> stream = query.getResultStream();
stream.forEach(emp -> {
System.out.println(emp.getFirstName() + " " + emp.getLastName());
});
} finally {
if (em != null)
em.close();
if (emf != null)
emf.close();
}
}
}
package hr.gotowe;
import java.util.List;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.TypedQuery;
import hr.model.Employee;
public class Odczyt05_WszystkieRekordy_JPQL {
public static void main(String[] args) {
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("hr");
em = emf.createEntityManager();
TypedQuery<Employee> query = em.createQuery("SELECT emp FROM Employee emp", Employee.class);
List<Employee> lista = query.getResultList();
System.out.println("Ilość rekordów " + lista.size());
for (Employee employee : lista) {
System.out.println(employee.getFirstName() + " " + employee.getLastName());
}
} finally {
if (em != null)
em.close();
if (emf != null)
emf.close();
}
}
}
package hr.gotowe;
import java.util.List;
import javax.swing.JOptionPane;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.TypedQuery;
import hr.model.Employee;
public class Odczyt06_Warunek {
public static void main(String[] args) {
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("hr");
em = emf.createEntityManager();
String kogoSzukam = JOptionPane.showInputDialog("Podaj kod stanowiska");
// to działało:
// TypedQuery<Employee> query = em.createQuery("SELECT emp FROM Employee emp WHERE job.jobId = ?1", Employee.class);
// query.setParameter(1, kogoSzukam);
// ale to już nie ("legacy parameter style"):
// TypedQuery<Employee> query = em.createQuery("SELECT emp FROM Employee emp WHERE job.jobId = ?", Employee.class);
// query.setParameter(1, kogoSzukam);
// wszystkie trzy zapisy zadziałały:
// TypedQuery<Employee> query = em.createQuery("SELECT emp FROM Employee emp WHERE job_id = :kto", Employee.class);
// TypedQuery<Employee> query = em.createQuery("SELECT emp FROM Employee emp WHERE job.jobId = :kto", Employee.class);
TypedQuery<Employee> query = em.createQuery("SELECT emp FROM Employee emp WHERE emp.job.jobId = :kto", Employee.class);
query.setParameter("kto", kogoSzukam);
List<Employee> lista = query.getResultList();
System.out.println("Ilość rekordów " + lista.size());
for (Employee employee : lista) {
System.out.println(employee.getFirstName() + " " + employee.getLastName());
//System.out.println(employee.getJob());
}
} finally {
if (em != null)
em.close();
if (emf != null)
emf.close();
}
}
}
package hr.gotowe;
import java.util.List;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.TypedQuery;
public class Odczyt07_Skalar {
public static void main(String[] args) {
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("hr");
em = emf.createEntityManager();
TypedQuery<String> query = em.createQuery("SELECT e.lastName FROM Employee e ORDER BY 1", String.class);
// też działa:
// TypedQuery<String> query = em.createQuery("SELECT lastName FROM Employee ORDER BY lastName", String.class);
List<String> names = query.getResultList();
for (String name : names) {
System.out.println(name);
}
} finally {
if(em != null) em.close();
if(emf != null) emf.close();
}
}
}
package hr.gotowe;
import java.util.Arrays;
import java.util.List;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.TypedQuery;
public class Odczyt08_Tablica {
public static void main(String[] args) {
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("hr");
em = emf.createEntityManager();
TypedQuery<Object[]> query = em.createQuery("SELECT e.firstName, e.lastName, e.job.jobTitle, e.salary, e.department.departmentName, e.department.location.city FROM Employee e", Object[].class);
List<Object[]> rows = query.getResultList();
for (Object[] emp : rows) {
System.out.println(Arrays.toString(emp));
}
System.out.println("\nSprawdzę typy kolumn:");
Object[] row = (Object[])rows.get(0);
System.out.println(row[0].getClass().getSimpleName() + " " + row[2].getClass().getSimpleName() + " " + row[3].getClass().getSimpleName());
} finally {
if(em != null) em.close();
if(emf != null) emf.close();
}
}
}
package hr.gotowe;
import java.util.List;
import hr.dto.MiniEmp;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.TypedQuery;
public class Odczyt09_DTO {
// Przykład zastosowania techniki (wzorca projektowego?...) DTO (data transfer object).
// Klasa DTO pełni rolę pomocniczą, nie stanowi głównego modelu aplikacji.
// Obiekty tej klasy służą przekazywaniu parametrów, zwracaniu wyników z metod,
// np. zbieraniu danych z formularza webowego lub - tak jak tutaj - zbieraniu wyników zapytania bazodanowego.
// Technicznie rzecz biorąc: w JPQL można użyć NEW aby stworzyć obiekt za pomocą konstruktora.
public static void main(String[] args) {
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("hr");
em = emf.createEntityManager();
TypedQuery<MiniEmp> query = em.createQuery("SELECT new hr.dto.MiniEmp(e.firstName, e.lastName, e.job.jobTitle, e.salary) FROM Employee e", MiniEmp.class);
List<MiniEmp> emps = query.getResultList();
for (MiniEmp emp : emps) {
System.out.println(emp);
}
} finally {
if(em != null) em.close();
if(emf != null) emf.close();
}
}
}
package hr.gotowe;
import java.util.Arrays;
import java.util.List;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.TypedQuery;
public class Odczyt10_Group {
public static void main(String[] args) {
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("hr");
em = emf.createEntityManager();
TypedQuery<Object[]> query = em.createQuery("SELECT e.job.jobTitle, count(*), avg(e.salary) FROM Employee e GROUP BY e.job.jobTitle", Object[].class);
List<Object[]> emps = query.getResultList();
for (Object[] emp : emps) {
System.out.println(Arrays.toString(emp));
}
} finally {
if(em != null) em.close();
if(emf != null) emf.close();
}
}
}
package hr.gotowe;
import java.util.Arrays;
import java.util.List;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.TypedQuery;
public class Odczyt11_Join {
// Przykład JOIN zapisanego w składni JPQL - "przechodzenie po dowiązaniach".
public static void main(String[] args) {
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("hr");
em = emf.createEntityManager();
System.out.println("Odczyt...");
TypedQuery<Object[]> query = em.createQuery("SELECT e.firstName, e.lastName, d.departmentName, l.city"
+ " FROM Employee e LEFT JOIN e.department d LEFT JOIN d.location l", Object[].class);
List<Object[]> emps = query.getResultList();
for (Object[] emp : emps) {
System.out.println(Arrays.toString(emp));
}
} finally {
if(em != null) em.close();
if(emf != null) emf.close();
}
}
}
package hr.gotowe;
import java.util.List;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.TypedQuery;
import hr.model.Employee;
public class Odczyt12_WieleTabel {
public static void main(String[] args) {
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("hr");
em = emf.createEntityManager();
TypedQuery<Object[]> query = em.createQuery(
"SELECT DISTINCT emp, loc.city"
+ " FROM Employee emp, Location loc"
+ " WHERE substring(emp.lastName, 1, 1) = substring(loc.city, 1, 1)"
+ " ORDER BY emp.lastName, emp.firstName",
Object[].class);
List<Object[]> results = query.getResultList();
System.out.println(results.size());
for (Object[] tab : results) {
Employee emp = (Employee)tab[0];
String city = (String)tab[1];
System.out.printf("%-20s %-20s %-20s\n", emp.getFirstName(), emp.getLastName(), city);
}
} finally {
if(em != null) em.close();
if(emf != null) emf.close();
}
}
}
package hr.gotowe;
import java.util.List;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.Query;
// Prosty przykład native query.
// Wynik odczytywany jako lista wierszy, każdy wiersz jako Object[].
public class Odczyt13_Native {
public static void main(String[] args) {
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("hr");
em = emf.createEntityManager();
Query query = em.createNativeQuery(
"SELECT first_name || ' ' || last_name, job_title, salary FROM employees JOIN jobs USING(job_id) ORDER BY employee_id");
List<?> rows = query.getResultList();
for (Object row : rows) {
// na wszelki wypadek sprawdzam, ale widzę, że Object[] działa
if(row instanceof Object[]) {
Object[] cols = (Object[]) row;
System.out.println(cols[0] + " pracuje jako " + cols[1] + " i zarabia " + cols[2]);
}
}
System.out.println();
// Biorę pierwszy wiersz i (informacyjnie, dla nas podczas nauki) sprawdzam typy kolumn. Zauważmy, że kolumna salary jest mapowana na BigDecimal.
System.out.println("Sprawdzę typy kolumn:");
Object[] row = (Object[])rows.get(0);
System.out.println(row[0].getClass().getSimpleName() + " " + row[1].getClass().getSimpleName() + " " + row[2].getClass().getSimpleName());
} finally {
if(em != null) em.close();
if(emf != null) emf.close();
}
}
}
package hr.gotowe;
import java.util.Arrays;
import java.util.List;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.Query;
// Sensowny przykład native query.
// Pokazuję, że dzięki niemu można skorzystać z funkcji konkretnej bazy danych.
// Tutaj (z dokumentacją przed nosem ;) ) wykombinowałem zapytanie z "funkcjami okienkowymi"
// - funkcjonalność znana głównie w Oracle, dostępna także w PostgreSQL.
public class Odczyt14_Native {
public static void main(String[] args) {
final String sql = """
SELECT employee_id AS "id",
department_name AS "departmentName",
first_name AS "firstName",
last_name AS "lastName",
job_title AS "jobTitle",
salary AS "salary",
round(avg(salary) OVER (PARTITION BY department_id), 2) AS "depAvg",
round(salary - avg(salary) OVER (PARTITION BY department_id), 2) AS "diff",
rank() OVER (PARTITION BY department_id ORDER BY salary DESC) AS "depPos",
rank() OVER (ORDER BY salary DESC) AS "globalPos"
FROM departments d
INNER JOIN employees e USING(department_id)
INNER JOIN jobs j USING(job_id)
ORDER BY 7 DESC, 2, 6 DESC, 4 ASC, 3 ASC
""";
System.out.println(sql);
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("hr");
em = emf.createEntityManager();
Query query = em.createNativeQuery(sql);
List<?> rows = query.getResultList();
for (Object row : rows) {
if (row instanceof Object[]) {
Object[] cols = (Object[]) row;
System.out.println(Arrays.toString(cols));
}
}
} finally {
if(em != null) em.close();
if(emf != null) emf.close();
}
}
}
package hr.gotowe;
import java.util.List;
import hr.dto.PracownikWDepartamencie;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.Query;
// Sensowny przykład native query.
// Pokazuję, że dzięki niemu można skorzystać z funkcji konkretnej bazy danych.
// Tutaj (z dokumentacją przed nosem ;) ) wykombinowałem zapytanie z "funkcjami okienkowymi"
// - funkcjonalność znana głównie w Oracle, dostępna także w PostgreSQL.
// W tej wersji dodatkowo wyniki pakuję do własnej klasy PracownikWDepartamencie
public class Odczyt15_Native_DTO {
public static void main(String[] args) {
final String sql = """
SELECT employee_id AS "id",
department_name AS "departmentName",
first_name AS "firstName",
last_name AS "lastName",
job_title AS "jobTitle",
salary AS "salary",
round(avg(salary) OVER (PARTITION BY department_id), 2) AS "depAvg",
rank() OVER (PARTITION BY department_id ORDER BY salary DESC) AS "depPos",
rank() OVER (ORDER BY salary DESC) AS "globalPos"
FROM departments d
INNER JOIN employees e USING(department_id)
INNER JOIN jobs j USING(job_id)
ORDER BY 7 DESC, 2, 6 DESC, 4 ASC, 3 ASC
""";
System.out.println(sql);
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("hr");
em = emf.createEntityManager();
Query query = em.createNativeQuery(sql, PracownikWDepartamencie.class);
List<?> rows = query.getResultList();
System.out.println(PracownikWDepartamencie.naglowek());
for (Object row : rows) {
//System.out.println(row);
PracownikWDepartamencie p = (PracownikWDepartamencie)row;
System.out.println(p.dajInfo());
}
} finally {
if(em != null) em.close();
if(emf != null) emf.close();
}
}
}
package hr.gotowe;
import java.util.List;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.Query;
import hr.model.Country;
// Wracając do prostszych rzeczy: Wynik native query można bez problemu odczytać jako normalną encję.
public class Odczyt16_Native_Entity {
public static void main(String[] args) {
final String sql = "SELECT * FROM countries";
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("hr");
em = emf.createEntityManager();
Query query = em.createNativeQuery(sql, Country.class);
List<Country> rows = (List<Country>)query.getResultList();
for (Country country : rows) {
System.out.println(country.getCountryId() + " " + country.getCountryName());
}
} finally {
if(em != null) em.close();
if(emf != null) emf.close();
}
}
}
package hr.gotowe;
import java.util.Scanner;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import hr.model.Employee;
public class OdczytajManagerow {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("hr");
em = emf.createEntityManager();
while(true) {
System.out.print("\nPodaj id pracownika: ");
if(!sc.hasNextInt())
break;
int id = sc.nextInt();
Employee emp = em.find(Employee.class, id);
if(emp == null) {
System.out.println("nie znaleziono takiego pracownika");
continue;
}
while(emp != null) {
System.out.println(" " + emp.getId() + " " + emp.getFirstName() + " " + emp.getLastName()
+ "(" + emp.getJob().getJobTitle() + ")" + " $" + emp.getSalary());
emp = em.find(Employee.class, emp.getManager());
System.out.println("Managerem jest:");
}
}
} finally {
if(em != null)
em.close();
if(emf != null)
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