Skip to content

vicziani/jtechlog-blaze

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Spring Data JPA és a Blaze-Persistence

Témák: JPA, Hibernate, Spring Data JPA, Blaze-Persistence, JPA Buddy

Technológiák

JPA

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.persistence csomag
  • 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

Hibernate

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

Spring Data JPA

  • 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

Projection:

  • Interface based projections, Open/closed projections
  • Class based projections (DTOs)
    • Dynamic projections (query és a DTO különválasztása)

Blaze Persistence

Core

Criteria API for JPA backends

  • JPA-ra épül
  • Fluent, easy to use query builder api
  • Rich pagination
  • SET operations (UNION, INTERSECT)
  • RETURNING
  • VALUES
  • Window functions
  • Common table expressions

Entity View Module

  • 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

JPA Buddy

IntelliJ IDEA plugin

Támogatás: JPA, Hibernate, EclipseLink, Spring Data JPA, Blaze Persistence, Lombok, MapStruct, ModelMapper, Liquibase, Flyway

Querydsl

Type safe query, több technológián

Források

Demó

Spring Data JPA

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=trace
<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>

Window function

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

Common table expressions

Blaze Persistence

  • 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>
  • BlazePersistenceConfiguration
  • EmployeeBlazeDao
  • Query
  • Keyset pagination
  • Window functions
  • Common table expressions

Entity view module

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

About

JPA, Hibernate, Spring Data JPA és Blaze-Persistence

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages