java 8 in action.jinq.v.1.3

50
Java 8 in action. Jinq Sergey Morenets, [email protected] March, 12 2015

Upload: alex-tumanoff

Post on 18-Jul-2015

1.332 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Java 8 in action.jinq.v.1.3

Java 8 in action.Jinq

Sergey Morenets, [email protected]

March, 12 2015

Page 2: Java 8 in action.jinq.v.1.3

About author• Works in IT since 2000

• 11 year of Java SE/EE experience

• Regular speaker on Java User Group conferences

• Java evangelist

Page 3: Java 8 in action.jinq.v.1.3

Agenda

• Java 8 overview

• Libraries support

• Jinq

• Q&A

Page 4: Java 8 in action.jinq.v.1.3

Java 8 overview

Page 5: Java 8 in action.jinq.v.1.3

Java 8 overview

• Lambda expressions

• Streams API

• Java time

• Default & static methods

• Method references

• Repeating & type annotations

• Hashorn

• Metaspace

Page 6: Java 8 in action.jinq.v.1.3

Native support

• Lambda expressions

• Default methods

• Method references

• Nashorn

• Metaspace

Page 7: Java 8 in action.jinq.v.1.3

Type annotations

• @Nullable

• @NonNull

• @ReadOnly

Page 8: Java 8 in action.jinq.v.1.3

Repeatable annotations

• Spring Framework

Page 9: Java 8 in action.jinq.v.1.3

Java time

• Joda replacement

• Supported in Spring 4

• Ignored by Hibernate, partially supported by JPA

Page 10: Java 8 in action.jinq.v.1.3

Hibernate

Page 11: Java 8 in action.jinq.v.1.3

JPA

Page 12: Java 8 in action.jinq.v.1.3

JPA

Page 13: Java 8 in action.jinq.v.1.3

Streams API

Page 14: Java 8 in action.jinq.v.1.3

Streams API

Page 15: Java 8 in action.jinq.v.1.3

File storage

Page 16: Java 8 in action.jinq.v.1.3

Data access

Page 17: Java 8 in action.jinq.v.1.3

Data access

• JDBC

• Spring JDBC

• ORM (Hibernate)

• JPA

• Functional programming

Page 18: Java 8 in action.jinq.v.1.3

Recently

• SQL

• HQL/JPQL

• Hibernate/JPA criteria

• Custom API

Page 19: Java 8 in action.jinq.v.1.3

Jinq

• Initially developed by Dr. Ming-Yee

• Open-source project

• Functional database queries in Java and Scala

• Inspired by LINQ

• Required JPA & Java 8

Page 20: Java 8 in action.jinq.v.1.3

Jinq flow

• Translated Java code and Run it as database query

statements

• Run as ordinary Java code

Page 21: Java 8 in action.jinq.v.1.3

Configuration

• Map entities

• JPA provider

• JPA configuration

Page 22: Java 8 in action.jinq.v.1.3

Configuration

Page 23: Java 8 in action.jinq.v.1.3

Configuration

Page 24: Java 8 in action.jinq.v.1.3

Count

select count(city.id) from City city

Page 25: Java 8 in action.jinq.v.1.3

Filtering

Page 26: Java 8 in action.jinq.v.1.3

Jinq

select city.id, city.name, city.population from City city

limit ?

Page 27: Java 8 in action.jinq.v.1.3

Where

select count(city.id) from City city where

city.population>100

Page 28: Java 8 in action.jinq.v.1.3

Variables

select count(city.id) from City city where

city.population > ?

Page 29: Java 8 in action.jinq.v.1.3

Select

select city.name from City city limit ?

Page 30: Java 8 in action.jinq.v.1.3

Comparison

select count(city.id) from City city where

city.name='Odessa'

Page 31: Java 8 in action.jinq.v.1.3

Comparison

select count(city.id) from City city where city.name is

not null

Page 32: Java 8 in action.jinq.v.1.3

Concatenation

select concat('City:', city.name) from City city limit ?

Page 33: Java 8 in action.jinq.v.1.3

Concatenation

Page 34: Java 8 in action.jinq.v.1.3

Aggregate

select max(city.population) from City city

Page 35: Java 8 in action.jinq.v.1.3

Methods

Page 36: Java 8 in action.jinq.v.1.3

Sorting

select city.id, city.name, city.population as from City

city order by city.population ASC, city.name ASC limit

?

Page 37: Java 8 in action.jinq.v.1.3

Country

Page 38: Java 8 in action.jinq.v.1.3

Associations

select count(city.id) from City city cross join Country

country where city.countryId=country.id and

country.name='Ukraine'

Page 39: Java 8 in action.jinq.v.1.3

Pairs

select city.id, country.id, city.countryId, city.name,

city.population, country.name from City city inner join

Country country on city.countryId=country.id limit ?

Page 40: Java 8 in action.jinq.v.1.3

Join

• join()

• joinList()

• selectAll()

Page 41: Java 8 in action.jinq.v.1.3

Grouping

• select city.countryId, sum(city.population),

count(city.id), country.id, country.name from City

city inner join Country country on city.countryId=

country.id group by city.countryId limit ?

Page 42: Java 8 in action.jinq.v.1.3

Limitations

• Your code cannot contain any loops

• Your code can call other methods but only those

from a restricted list with known side-effects

• Your code can read and modify local variables

(since these changes will be discarded once the

function exits)

• Your code can read but not modify non-local

variables

• Your code cannot contain casting between

different data types

Page 43: Java 8 in action.jinq.v.1.3

Data types

Java type Supported operations

String equals()

BigDecimal, BigInteger, Integer, int, Double, double, Long, long

==, <, <=, >, >=, !=, +, -, *, /

Boolean, boolean !, &&, ||, ==

java.util.Date, java.sql.Date, java.sql.Time, java.sql.Timestamp, java.util.Calendar

equals(), before(), after()

enums ==, !=

entities ==, !=

java.util.Collection contains(), JPQL.isIn()

Page 44: Java 8 in action.jinq.v.1.3

Functions

Java JPQL alternative

Math.abs() / BigDecimal.abs() / BigInteger.abs()

ABS()

Math.sqrt() SQRT()

% MOD()

String.toUpperCase() / String.toLowerCase()

UPPER() / LOWER()

String.trim() TRIM()

String.length() LENGTH()

String.indexOf() LOCATE()

Page 45: Java 8 in action.jinq.v.1.3

Pro

• Brings up functional style

• Database & provider independent

• SQL-92 - compatible

Page 46: Java 8 in action.jinq.v.1.3

Cons

• Requires JPA

• Limited to JPA functionality

• No stored procedures

• Lacks NoSQL support

• Hard to debug

Page 47: Java 8 in action.jinq.v.1.3

To be continued?

• XML

• JSON

• JDBC

Page 48: Java 8 in action.jinq.v.1.3

Jooq

• Java object oriented querying

• Lightweight alternative

• JDBC wrapper

• SQL building, code generation & SQL execution

• Jinq provides basic support for Jooq

• Open-source & paid version

Page 49: Java 8 in action.jinq.v.1.3

References

Page 50: Java 8 in action.jinq.v.1.3

Q&A

Sergey Morenets, [email protected]