Transcript
Page 1: Slick - The Structured Way

SlickThe Structured Way

Page 2: Slick - The Structured Way

YENNICK? YANNICK? JANNICK?

Reactive Applications ConsultantCertified Typesafe “Fast Track to Scala” trainer

@[email protected]

Page 3: Slick - The Structured Way

WHY SLICK?

Option(Anorm).orElse(Hibernate).orElse(Slick)

Pure ScalaImmutable data structuresDB agnostic codeType safety

Page 4: Slick - The Structured Way

TALK MOTIVATION

Page 5: Slick - The Structured Way

MEAT OF THE TALK

Page 6: Slick - The Structured Way

ESSENTIALS

Build queries with ScalaLifted embedding

Query result result rows

ID TITLE ID FIRSTNAME LASTNAME

1 “Scala” 10 Yennick Trevels

1 “Scala” 11 Eric Loots

2 “Slick” 12 Filip Maelbrancke

Page 7: Slick - The Structured Way

IMPORTS

Database specific

Database agnostic import use Play-Slick plugin

Page 8: Slick - The Structured Way

SESSION SCOPE

Page 9: Slick - The Structured Way

TRANSACTION SCOPE

Page 10: Slick - The Structured Way

SAMPLE DATABASE

MEETING

DOCUMENT ATTENDEE_LINK

ATTENDEE

ID … MEETING_ID

ATTENDEE_ID

ID … MEETING_ID

ID …

ID …

Page 11: Slick - The Structured Way

LEVEL 1: MAPPING TABLES

Page 12: Slick - The Structured Way

TABLE MAPPING: MEETING

Page 13: Slick - The Structured Way

TABLE MAPPING: MEETING

Page 14: Slick - The Structured Way

TABLE MAPPING: LINK TABLE

Page 15: Slick - The Structured Way

LEVEL 2: BASIC QUERIES

Page 16: Slick - The Structured Way

FILTER STATEMENTS

Slick

SQL

=== instead of ==

Page 17: Slick - The Structured Way

FILTER STATEMENTS

Slick

BracketsPut || or && at end of line

Page 18: Slick - The Structured Way

SORTING

Slick

SQL

Page 19: Slick - The Structured Way

EXISTS

Slick

SQL

Page 20: Slick - The Structured Way

DEFINING THE RESULT

Slick

SQL

Result

Page 21: Slick - The Structured Way

DEFINING THE RESULT

Slick

SQL

Result

Page 22: Slick - The Structured Way

DEFINING THE RESULT

Slickmeetings.list List[Meeting]meetings.first Meeting or NoSuchElementExceptionmeetings.firstOption Option[Meeting]

Page 23: Slick - The Structured Way

LEVEL 3: ADVANCED QUERIES

Page 24: Slick - The Structured Way

INNER JOIN

Slick

SQL

Result

Page 25: Slick - The Structured Way

INNER JOIN (RESULT MAPPING)

Slick

Result

Page 26: Slick - The Structured Way

OUTER JOINS (THE PROBLEM)

Slick

Page 27: Slick - The Structured Way

OUTER JOINS (THE PROBLEM)

ID TITLE ID MEETING_ID ATTENDEE_ID

1 “Scala” NULL NULL NULL

2 “Slick” 10 2 20

3 “Slick” 11 2 21

ID TITLE

1 “Scala”

2 “Slick”

ID MEETING_ID

ATTENDEE_ID

10 2 20

11 2 21

Left Join

Ref: http://www.slideshare.net/skillsmatter/patterns-for-slick-database-applications

Page 28: Slick - The Structured Way

OUTER JOINS

Slick

Result

Page 29: Slick - The Structured Way

OUTER JOINS (RESULT TRANSF.)

Slick

Page 30: Slick - The Structured Way

THE ? FUNCTION

Solution expected somewhere this year

Page 31: Slick - The Structured Way

LEVEL 4: INSERT/UPDATE/DELETE

Page 32: Slick - The Structured Way

INSERT

Slick

SQL

Page 33: Slick - The Structured Way

UPDATE

Slick

SQL

Page 34: Slick - The Structured Way

DELETE

Slick

SQL

Page 35: Slick - The Structured Way

LEVEL 5: SLICK + PLAY

Page 36: Slick - The Structured Way

APPLICATION.CONF

Page 37: Slick - The Structured Way

DATABASE AGNOSTIC IMPORTS

Page 38: Slick - The Structured Way

DB WRAPPER

Page 39: Slick - The Structured Way

LEVEL 6: INTEGRATION TESTING

Page 40: Slick - The Structured Way

TABLE CREATION

Using Play-Slick plugin classes

Page 41: Slick - The Structured Way

IN-MEMORY DATABASE CONFIG

Page 42: Slick - The Structured Way

TEST DATA SETUP

Just use Slick…

Page 43: Slick - The Structured Way

CONCLUSION

Page 44: Slick - The Structured Way

THOUGHTS ON SLICK

+ Lightweight+ Level of control+ Production ready

- Documentation- Generated Queries (readability)


Top Related