Témák: JPA, Hibernate, Spring Data JPA, Blaze-Persistence, JPA Buddy
ORM szabvány
- JPA 2.0, 2009-ben, element collection, Criteria Query API
- JPA 2.1, entity graph, stored procedures
- JPA 2.2, streaming, Java 8 date and type
- Jakarta Persistence 3.0,
jakarta.persistencecsomag - Jakarta Persistence 3.1, UUID id
- Jakarta Persistence 3.2 (under construction, Jakarta EE 11 tervezett 2024. nyara), embeddable records
Lekérdező nyelve: JPQL, objektumorientált lekérdező nyelv
Dinamikus lekérdezés összeállítás: Criteria API
Projection: select new employees.EmployeeDto(e.id, e.name) from ..., akár record is
JPA implementáció
- Hibernate 6.x - JPA 3.1, embeddable records
- Hibernate 7.0 - JPA 3.2
Lekérdező nyelve: Hibernate Query Language, HQL, ami JPQL superset
- Window functions
- Common table expressions
- Repository interface
- Query derivation from method names
- Spring Data több technológiával, ebből egy a Spring Data JPA
Dinamikus lekérdezés összeállítás: Specification, Criteria API segítségével
- Interface based projections, Open/closed projections
- Class based projections (DTOs)
- Dynamic projections (query és a DTO különválasztása)
Criteria API for JPA backends
- JPA-ra épül
- Fluent, easy to use query builder api
- Rich pagination
- SET operations (
UNION,INTERSECT) RETURNINGVALUES- Window functions
- Common table expressions
- Helyes DTO kezelés (
@EntityView) - Query és a DTO különválasztása
- Csak annyi rekord és mező kerüljön lekérdezésre, amennyire tényleg szükség van
- DTO-k használata létrehozáskor (
@CreatableEntityView) és módosításkor (UpdateEmployeeCommandView) is
IntelliJ IDEA plugin
Támogatás: JPA, Hibernate, EclipseLink, Spring Data JPA, Blaze Persistence, Lombok, MapStruct, ModelMapper, Liquibase, Flyway
Type safe query, több technológián
- Getting Started with Blaze Persistence
- Hibernate 6 and JPQL Window Functions
- SQL CTE – Common Table Expression
- Blaze Persistence – The Best Way to Write JPA Criteria Queries
- Using Window Functions with Hibernate 5 & 6
- Create better Criteria queries with Blaze persistence
docker run -d -e POSTGRES_DB=employees -e POSTGRES_USER=employees -e POSTGRES_PASSWORD=employees -p 5432:5432 --name employees-postgres postgres- Projekt létrehozás: Spring Data JPA, Postgres, Lombok
application.properties
spring.application.name=data-jpa
spring.datasource.url=jdbc:postgresql://localhost:5432/employees
spring.datasource.username=employees
spring.datasource.password=employees
spring.jpa.generate-ddl=true
logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.orm.jdbc.bind=traceEmployeeentity létrehozása, LombokEmployeeRepositorylétrehozása JPA Buddy-val- Mockaroo
EmployeeDtolétrehozása JPA Buddy-val,id,nameEmployeeWithSalaryDtolétrehozása létrehozása JPA Buddy-val- Projection query
- Spring Data JPA Dynamic projections
JpaSpecificationExecutor<Employee>,EmployeeSpecifications- Metadata generálás
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<annotationProcessorPath>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</annotationProcessorPath>
<annotationProcessorPath>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>6.5.3.Final</version>
</annotationProcessorPath>
</annotationProcessorPaths>
</configuration>
</plugin>Az SQL Window Function egy hatékony eszköz adatbázisokban, amely lehetővé teszi, hogy rekordcsoportok felett számításokat végezzünk anélkül, hogy azokat aggregálnánk, azaz az eredeti sorokat érintetlenül hagyjuk.
- Rangsorolás és sorrend
- Futó összesítések
- Mozgó átlagok és csúszó ablak számítások
- Előző és következő értékek kinyerése
- Adatcsoportok részleges összesítése
- Arányok és százalékok kiszámítása
pom.xml
<dependency>
<groupId>com.blazebit</groupId>
<artifactId>blaze-persistence-integration-spring-data-3.3</artifactId>
<version>1.6.14</version>
</dependency>
<dependency>
<groupId>com.blazebit</groupId>
<artifactId>blaze-persistence-integration-hibernate-6.2</artifactId>
<version>1.6.14</version>
</dependency>BlazePersistenceConfigurationEmployeeBlazeDao- Query
- Keyset pagination
- Window functions
- Common table expressions
Mi a baj a DTO-kkal?
-
Kódismétlés
-
Entitás betöltése, konvertálgatás, akár collectionökön is
-
Felesleges adatok betöltése
-
JPA-ban speciális query kell
-
Azért mert más adat kell a felületnek, perzisztens réteget kell változtatni
-
EmployeeView,EmployeeViewRepository -
Dynamic projection:
EmployeeWithSalaryView -
CreateEmployeeCommandView -
UpdateEmployeeCommandView