122
Java & SQL Stronger Together @MarkusWinand @ModernSQL Picture: Africa Studio@Shutterstock

Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

  • Upload
    others

  • View
    62

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

Java & SQL Stronger Together

@MarkusWinand @ModernSQL

Picture: Africa Studio@Shutterstock

Page 2: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1
Page 3: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

“We can solve any problem by introducing an extra

level of abstraction” (Based on the “fundamental theorem of software engineering”)

Page 4: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1
Page 5: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

Database

Page 6: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBC

Provides unique API for different SQL-

Databases

Page 7: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Provides unique API for different SQL-

Databases

Maps objects from/to tables

Page 8: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPA

Provides unique API for different SQL-

Databases

Maps objects from/to tables

Makes common tasks very simple

Page 9: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Provides unique API for different SQL-

Databases

Maps objects from/to tables

Makes common tasks very simple

Page 10: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Provides unique API for different SQL-

Databases

Maps Objects from/to tables

Makes common tasks very simple

90%?

Doesn’t provide 100% of underlying

functionality

Page 11: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Provides unique API for different SQL-

Databases

Maps Objects from/to tables

Makes common tasks very simple

90%?Proprietary data types? —> (VendorCls)jdbcCls

Page 12: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Provides unique API for different SQL-

Databases

Maps Objects from/to tables

Makes common tasks very simple

90%?Proprietary data types? —> (VendorCls)jdbcCls

The processing is not about objects? —> QueryBuilder, JPQL

or native queries

Page 13: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Provides unique API for different SQL-

Databases

Maps Objects from/to tables

Makes common tasks very simple

90%?Proprietary data types? —> (VendorCls)jdbcCls

The processing is not about objects? —> QueryBuilder, JPQL

or native queries

“Hibernate’s design goal is to relieve the developer

from 95% of common data persistence-related

programming tasks[…] Hibernate does not hide

the power of SQLfrom you[…]”

— Hibernate ORM User Guide (second paragraph)

Page 14: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Provides unique API for different SQL-

Databases

Maps Objects from/to tables

Makes common tasks very simple

90%?Proprietary data types? —> (VendorCls)jdbcCls

The processing is not about objects? —> QueryBuilder, JPQL

or native queries

Page 15: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Provides unique API for different SQL-

Databases

Maps Objects from/to tables

Makes common tasks very simple

90%?Proprietary data types? —> (VendorCls)jdbcCls

The processing is not about objects? —> QueryBuilder, JPQL

or native queries

findBy… not powerful enough? —> QueryBuilder, JPQL

or native queries

Page 16: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

What is theright level of abstraction

for any given problem?

Page 17: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

Pattern #1: Lists

1.2.3.

Go for a walk in the woods

Picnic

Improve SQL-foo

BUCKET LISTSpring

Page 18: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

List: All Attributes

Page 19: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECT*FROMtbl

List: All Attributes

Page 20: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

ResultSetrs=c.prepareStatement("SELECT*"+"FROMtbl").executeQuery();

SELECT*FROMtbl

List: All Attributes

Page 21: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Collection<Entity>c=em.createQuery("FROMEntity").getResultList();

ResultSetrs=c.prepareStatement("SELECT*"+"FROMtbl").executeQuery();

SELECT*FROMtbl

List: All Attributes

Page 22: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Collection<Entity>c=em.createQuery("FROMEntity").getResultList();

Collection<Entity>c=r.findAll();

ResultSetrs=c.prepareStatement("SELECT*"+"FROMtbl").executeQuery();

SELECT*FROMtbl

List: All Attributes

Page 23: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

List: Some Attributes

Page 24: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa1,…FROMtbl

List: Some Attributes

Page 25: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa1,…FROMtbl

List: Some Attributes

Runtime improvement: ~0% - 10 000%

Page 26: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa1,…FROMtbl

List: Some Attributes

Runtime improvement: ~0% - 10 000%

Affects:

Page 27: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa1,…FROMtbl

List: Some Attributes

Runtime improvement: ~0% - 10 000%

Affects:- Java: GC

Page 28: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa1,…FROMtbl

List: Some Attributes

Runtime improvement: ~0% - 10 000%

Affects:- Java: GC- Network

Page 29: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa1,…FROMtbl

List: Some Attributes

Runtime improvement: ~0% - 10 000%

Affects:- Java: GC- Network- Database:

Page 30: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa1,…FROMtbl

List: Some Attributes

Runtime improvement: ~0% - 10 000%

Affects:- Java: GC- Network- Database:

- Index Only Scan

Page 31: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa1,…FROMtbl

List: Some Attributes

Runtime improvement: ~0% - 10 000%

Affects: - Java: GC - Network - Database:

- Index Only Scan - Mem + CPU (e.g. sorting)

Page 32: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

ResultSetrs=c.prepareStatement("SELECTa1,…"+"FROMtbl").executeQuery();

SELECTa1,…FROMtbl

List: Some Attributes

Page 33: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Collection<DTO>c=em.createQuery("SELECTnewDTO(a1,…)"+"FROMEnt").getResultList();

ResultSetrs=c.prepareStatement("SELECTa1,…"+"FROMtbl").executeQuery();

SELECTa1,…FROMtbl

List: Some Attributes

Page 34: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Collection<DTO>c=em.createQuery("SELECTnewDTO(a1,…)"+"FROMEnt").getResultList();

ResultSetrs=c.prepareStatement("SELECTa1,…"+"FROMtbl").executeQuery();

SELECTa1,…FROMtbl

List: Some Attributes

Or: LAZY attributes

Page 35: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Collection<DTO>c=em.createQuery("SELECTnewDTO(a1,…)"+"FROMEnt").getResultList();

ResultSetrs=c.prepareStatement("SELECTa1,…"+"FROMtbl").executeQuery();

SELECTa1,…FROMtbl

List: Some Attributes

Or: LAZY attributes

<P>Collection<P>findAllProjectedBy(Class<P>p);

Page 36: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Collection<DTO>c=em.createQuery("SELECTnewDTO(a1,…)"+"FROMEnt").getResultList();

ResultSetrs=c.prepareStatement("SELECTa1,…"+"FROMtbl").executeQuery();

SELECTa1,…FROMtbl

List: Some Attributes

Or: LAZY attributes

<P>Collection<P>findAllProjectedBy(Class<P>p);

publicinterfaceProj{…getA1();…}

Page 37: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Collection<DTO>c=em.createQuery("SELECTnewDTO(a1,…)"+"FROMEnt").getResultList();

ResultSetrs=c.prepareStatement("SELECTa1,…"+"FROMtbl").executeQuery();

SELECTa1,…FROMtbl

List: Some Attributes

Or: LAZY attributes

<P>Collection<P>findAllProjectedBy(Class<P>p);Collection<Proj>c=r.findAllProjectedBy(Proj.class);

publicinterfaceProj{…getA1();…}

Page 38: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

List: Attributes of Multiple Objects

Page 39: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa.a1,b.a1,…FROMtblaJOINtbl2b

List: Attributes of Multiple Objects

Page 40: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Collection<DTO>c=em.createQuery("SELECT"+"newDTO(a.a1,b.a1,…)"+"FROMEntityaJOINa.childb").getResultList();

SELECTa.a1,b.a1,…FROMtblaJOINtbl2b

List: Attributes of Multiple Objects

Page 41: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Collection<DTO>c=em.createQuery("SELECT"+"newDTO(a.a1,b.a1,…)"+"FROMEntityaJOINa.childb").getResultList();

SELECTa.a1,b.a1,…FROMtblaJOINtbl2b

List: Attributes of Multiple Objects

<P>Collection<P>findAllProjectedBy(Class<P>p);Collection<Proj>c=r.findAllProjectedBy(Proj.class);

Page 42: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Collection<DTO>c=em.createQuery("SELECT"+"newDTO(a.a1,b.a1,…)"+"FROMEntityaJOINa.childb").getResultList();

SELECTa.a1,b.a1,…FROMtblaJOINtbl2b

List: Attributes of Multiple Objects

<P>Collection<P>findAllProjectedBy(Class<P>p);Collection<Proj>c=r.findAllProjectedBy(Proj.class);

publicinterfaceProj{…getA1();Proj2getB();}

Page 43: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Collection<DTO>c=em.createQuery("SELECT"+"newDTO(a.a1,b.a1,…)"+"FROMEntityaJOINa.childb").getResultList();

SELECTa.a1,b.a1,…FROMtblaJOINtbl2b

List: Attributes of Multiple Objects

<P>Collection<P>findAllProjectedBy(Class<P>p);Collection<Proj>c=r.findAllProjectedBy(Proj.class);

publicinterfaceProj{…getA1();Proj2getB();}

Still selects all columns

DATAJPA-1218

Page 44: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

Collection<DTO>c=em.createQuery("SELECT"+"newDTO(a.a1,b.a1,…)"+"FROMEntityaJOINa.childb").getResultList();

SELECTa.a1,b.a1,…FROMtblaJOINtbl2b

List: Attributes of Multiple Objects

@Query("SELECT"+"newDTO(a.a1,b.a1,…)"+"FROMEntityaJOINa.childb")Collection<DTO>findAllDtoProj();Collection<DTO>c=r.findAllDtoProj();

publicinterfaceProj{…getA1();Proj2getB();}

Still selects all columns

DATAJPA-1218

Page 45: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

List: Derived Data

Page 46: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa.a1,SUM(b.a1)FROMtblaJOINtbl2bGROUPBYa.a1

List: Derived Data

Page 47: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code Collection<DTO>c=

em.createQuery("SELECT"+"newDTO(a.a1,SUM(b.a1))"+"FROMEntityaJOINa.childb"+"GROUPBYa").getResultList();

SELECTa.a1,SUM(b.a1)FROMtblaJOINtbl2bGROUPBYa.a1

List: Derived Data

Page 48: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code Collection<DTO>c=

em.createQuery("SELECT"+"newDTO(a.a1,SUM(b.a1))"+"FROMEntityaJOINa.childb"+"GROUPBYa").getResultList();

SELECTa.a1,SUM(b.a1)FROMtblaJOINtbl2bGROUPBYa.a1

List: Derived Data@Query("SELECT"+"newDTO(a.a1,SUM(b.a1))"+"FROMEntityaJOINa.childb"+"GROUPBYa")Collection<DTO>findAllDtoProj();Collection<DTO>c=r.findAllDtoProj();

Page 49: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa.a1,SUM(b.a1),SUM(CASEWHENb.a2=1THENb.a1ELSE0END)FROMtblaJOINtbl2bGROUPBYa.a1

List: Derived Data

Page 50: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa.a1,SUM(b.a1),SUM(CASEWHENb.a2=1THENb.a1ELSE0END)FROMtblaJOINtbl2bGROUPBYa.a1

List: Derived Data

More beautifully, but rarely supported: SELECTa.a1,SUM(b.a1),SUM(b.a1)FILTER(WHEREb.a2=1)FROMtblaJOINtbl2bGROUPBYa.a1

Page 51: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa.a1,SUM(b.a1),SUM(CASEWHENb.a2=1THENb.a1ELSE0END)FROMtblaJOINtbl2bGROUPBYa.a1

List: Derived Data

More beautifully, but rarely supported: SELECTa.a1,SUM(b.a1),SUM(b.a1)FILTER(WHEREb.a2=1)FROMtblaJOINtbl2bGROUPBYa.a1

1999

2001

2003

2005

2007

2009

2011

2013

2015

2017

2019

5.1 MariaDBMySQL

9.4 PostgreSQL1.0 3.30 SQLite

DB2 LUWOracleSQL Server

Page 52: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa.a1,SUM(b.a1),SUM(CASEWHENb.a2=1THENb.a1ELSE0END)FROMtblaJOINtbl2bGROUPBYa.a1

List: Derived Data

JPQL doesn't allow CASE in aggregates

More beautifully, but rarely supported: SELECTa.a1,SUM(b.a1),SUM(b.a1)FILTER(WHEREb.a2=1)FROMtblaJOINtbl2bGROUPBYa.a1

1999

2001

2003

2005

2007

2009

2011

2013

2015

2017

2019

5.1 MariaDBMySQL

9.4 PostgreSQL1.0 3.30 SQLite

DB2 LUWOracleSQL Server

Page 53: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa.a1,SUM(b.a1),SUM(CASEWHENb.a2=1THENb.a1ELSE0END)FROMtblaJOINtbl2bGROUPBYa.a1

List: Derived Data

JPQL doesn't allow CASE in aggregates

Page 54: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa.a1,SUM(b.a1),SUM(CASEWHENb.a2=1THENb.a1ELSE0END)FROMtblaJOINtbl2bGROUPBYa.a1

List: Derived Data@NamedNativeQuery(name="Entity.findAllXy",query="<<SQL>>",resultSetMapping="…")@SqlResultSetMapping(…)publicclassEntity{…}

JPQL doesn't allow CASE in aggregates

Page 55: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa.a1,SUM(b.a1),SUM(CASEWHENb.a2=1THENb.a1ELSE0END)FROMtblaJOINtbl2bGROUPBYa.a1

List: Derived Data@NamedNativeQuery(name="Entity.findAllXy",query="<<SQL>>",resultSetMapping="…")@SqlResultSetMapping(…)publicclassEntity{…}

Collection<DTO>c=em.createNamedQuery("Entity.findAllXy").getResultList();

JPQL doesn't allow CASE in aggregates

Page 56: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECTa.a1,SUM(b.a1),SUM(CASEWHENb.a2=1THENb.a1ELSE0END)FROMtblaJOINtbl2bGROUPBYa.a1

List: Derived Data@NamedNativeQuery(name="Entity.findAllXy",query="<<SQL>>",resultSetMapping="…")@SqlResultSetMapping(…)publicclassEntity{…}

Collection<DTO>c=em.createNamedQuery("Entity.findAllXy").getResultList();

@Query(native=true)Collection<DTO>findAllXy();

JPQL doesn't allow CASE in aggregates

Page 57: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1
Page 58: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1
Page 59: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1
Page 60: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1
Page 61: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

Application

Page 62: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

Application

Page 63: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

Application

Page 64: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

Application ORMs are super useful for the Load-Change-Store

cycle on complexentity graphs.

Page 65: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

Application ORMs are super useful for the Load-Change-Store

cycle on complexentity graphs.

If the cycle is broken,entities might not be the right level of abstraction.

Page 66: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

Pattern #2: Search

Page 67: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

Pattern #2: Search

Page 68: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECT*FROMtbla<<supercomplexquery>>

Search: Load Entity from Native Query

Page 69: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECT*FROMtbla<<supercomplexquery>>

Search: Load Entity from Native Query

@NamedNativeQuery(name="Entity.findSpecialOnes",query="<<SQL>>",resultSetMapping="…")@SqlResultSetMapping(@entities=@EntityResult(entityClass=Entity.class))publicclassEntity{…}

Page 70: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

DatabaseJDBCJPA

Spring Data JPAYour Code

SELECT*FROMtbla<<supercomplexquery>>

Search: Load Entity from Native Query

@NamedNativeQuery(name="Entity.findSpecialOnes",query="<<SQL>>",resultSetMapping="…")@SqlResultSetMapping(@entities=@EntityResult(entityClass=Entity.class))publicclassEntity{…}

@Query(native=true)Collection<Entity>findSpecialOnes();

Page 71: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

CREATETABLEt(idINTEGER,parentINTEGER,)

Page 72: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

CREATETABLEt(idINTEGER,parentINTEGER,)

Page 73: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

CREATETABLEt(idINTEGER,parentINTEGER,)

Page 74: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1
Page 75: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1
Page 76: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

publicvoiddescendTree(Entitystart){for(Entitye:start.getChildren()){descendTree(e);}}

Page 77: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

publicvoiddescendTree(Entitystart){for(Entitye:start.getChildren()){descendTree(e);}}

Page 78: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

publicvoiddescendTree(Entitystart){for(Entitye:start.getChildren()){descendTree(e);}}

SELECT...FROMEntityWHEREparent=?

Page 79: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

publicvoiddescendTree(Entitystart){for(Entitye:start.getChildren()){descendTree(e);}}

SELECT...FROMEntityWHEREparent=?

Page 80: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

publicvoiddescendTree(Entitystart){for(Entitye:start.getChildren()){descendTree(e);}}

SELECT...FROMEntityWHEREparent=?

Page 81: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

publicvoiddescendTree(Entitystart){for(Entitye:start.getChildren()){descendTree(e);}}

SELECT...FROMEntityWHEREparent=?

publicvoidascendTree(Entitye){while(e!=null){e=e.getParent();}}

Page 82: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

publicvoiddescendTree(Entitystart){for(Entitye:start.getChildren()){descendTree(e);}}

SELECT...FROMEntityWHEREparent=?

publicvoidascendTree(Entitye){while(e!=null){e=e.getParent();}}

SELECT...FROMEntityWHEREid=?

Page 83: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1
Page 84: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

SELECTt.id,t.parentFROMtWHEREt.id=?

Page 85: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

SELECTt.id,t.parentFROMtWHEREt.id=?UNIONALLSELECTt.id,t.parentFROMtWHEREt.parent=?

Page 86: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

SELECTt.id,t.parentFROMtWHEREt.id=?UNIONALLSELECTt.id,t.parentFROMtWHEREt.parent=?

Page 87: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

SELECTt.id,t.parentFROMtWHEREt.id=?UNIONALLSELECTt.id,t.parentFROMtWHEREt.parent=?

Page 88: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

WITHRECURSIVEprev(id,parent)AS(

)

SELECTt.id,t.parentFROMtWHEREt.id=?UNIONALLSELECTt.id,t.parentFROMtJOINprevONt.parent=prev.id

SELECT*FROMprev

Page 89: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

WITHRECURSIVEprev(id,parent)AS(

)

SELECTt.id,t.parentFROMtWHEREt.id=?UNIONALLSELECTt.id,t.parentFROMtJOINprevONt.parent=prev.id

SELECT*FROMprev

Page 90: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

WITHRECURSIVEprev(id,parent)AS(

)

SELECTt.id,t.parentFROMtWHEREt.id=?UNIONALLSELECTt.id,t.parentFROMtJOINprevONprev.parent=t.id

SELECT*FROMprev

Page 91: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1
Page 92: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

Vendor Dialect

Page 93: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

Vendor DialectStandard SQL (ISO 9075)

Page 94: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

Vendor DialectStandard SQL (ISO 9075)

HQL

Page 95: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

Vendor DialectStandard SQL (ISO 9075)

HQLJPQL

Page 96: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

Vendor DialectStandard SQL (ISO 9075)

HQLJPQL

Spring .findBy…

Page 97: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

Vendor DialectStandard SQL (ISO 9075)

HQLJPQL

Spring .findBy…

1999

2001

2003

2005

2007

2009

2011

2013

2015

2017

2019

5.1 10.2 MariaDB8.0 MySQL

8.4 PostgreSQL1.0 3.8.3 SQLite

7.0 DB2 LUW11gR2 Oracle

2005 SQL Server

* without keyword recursive

withrecursive

**

*

Page 98: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

JVM

Page 99: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

JVM

Page 100: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

JVM

publicvoidascendTree(Entitye){while(e!=null){e=e.getParent();}}

Page 101: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

JVM

publicvoidascendTree(Entitye){while(e!=null){e=e.getParent();}}

Page 102: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

JVM

publicvoidascendTree(Entitye){while(e!=null){e=e.getParent();}}

Page 103: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

JVM

publicvoidascendTree(Entitye){while(e!=null){e=e.getParent();}}

PersistenceContext

Page 104: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

JVM

publicvoidascendTree(Entitye){while(e!=null){e=e.getParent();}}

PersistenceContext

Page 105: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

JVM

publicvoidascendTree(Entitye){while(e!=null){e=e.getParent();}}

PersistenceContext

Page 106: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

JVM

publicvoidascendTree(Entitye){while(e!=null){e=e.getParent();}}

PersistenceContext

Page 107: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1
Page 108: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

What if I run the recursive query

Page 109: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

What if I run the recursive query

Page 110: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

What if I run the recursive query

before my JPA logic?

Page 111: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

JVM

PersistenceContext

Page 112: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

JVM

PersistenceContext

@NamedNativeQuery(name="Entity.findSpecialOnes",query="<<SQL>>",resultSetMapping="…")@SqlResultSetMapping(@entities=@EntityResult(entityClass=Entity.class))publicclassEntity{…}

Page 113: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

JVM

PersistenceContext

findSpecialOnes();//WarmUp

Page 114: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

JVM

PersistenceContext

findSpecialOnes();//WarmUp

Page 115: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

JVM

PersistenceContext

findSpecialOnes();//WarmUp

Page 116: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

JVM

publicvoidascendTree(Entitye){while(e!=null){e=e.getParent();}}

PersistenceContext

findSpecialOnes();//WarmUp

Page 117: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1
Page 118: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1
Page 119: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

A lot has happened

since SQL-92

Page 120: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

SQL has evolved

beyond the relational idea

A lot has happened

since SQL-92

Page 121: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

SQL has evolved

beyond the relational idea

If you use SQL for CRUD operations only, you are doing it wrong

A lot has happened

since SQL-92

Page 122: Java & SQL Stronger Together€¦ · Java & SQL Stronger Together ... SQL Server. Database JDBC JPA Spring Data JPA Your Code SELECT a.a1, SUM(b.a1) , SUM(CASE WHEN b.a2=1 THEN b.a1

SQL has evolved

beyond the relational idea

If you use SQL for CRUD operations only, you are doing it wrong

A lot has happened

since SQL-92

https://modern-sql.com @ModernSQL by @MarkusWinand