slick - the structured way

45
Slick The Structured Way

Upload: yennick-trevels

Post on 10-May-2015

658 views

Category:

Technology


2 download

DESCRIPTION

Slick (part of the Typesafe stack) is a modern database query and access library for Scala, based on functional principles. It allows you to write queries as if you are working with regular Scala collections. In this presentation we’ll have a deep dive into how you can use this library in real projects. How to map your tables and queries to structured objects, how to create more advanced queries with multiple joins, how to setup integration tests against an in-memory database and how you can integrate Slick with the Play Framework are all questions which will have been answered at the end of this presentation. Originally presented on the BeScala user group.

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)