slick - the structured way
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](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/1.jpg)
SlickThe Structured Way
![Page 2: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/2.jpg)
YENNICK? YANNICK? JANNICK?
Reactive Applications ConsultantCertified Typesafe “Fast Track to Scala” trainer
![Page 3: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/3.jpg)
WHY SLICK?
Option(Anorm).orElse(Hibernate).orElse(Slick)
Pure ScalaImmutable data structuresDB agnostic codeType safety
![Page 4: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/4.jpg)
TALK MOTIVATION
![Page 5: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/5.jpg)
MEAT OF THE TALK
![Page 6: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/6.jpg)
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](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/7.jpg)
IMPORTS
Database specific
Database agnostic import use Play-Slick plugin
![Page 8: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/8.jpg)
SESSION SCOPE
![Page 9: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/9.jpg)
TRANSACTION SCOPE
![Page 10: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/10.jpg)
SAMPLE DATABASE
MEETING
DOCUMENT ATTENDEE_LINK
ATTENDEE
ID … MEETING_ID
ATTENDEE_ID
ID … MEETING_ID
ID …
ID …
![Page 11: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/11.jpg)
LEVEL 1: MAPPING TABLES
![Page 12: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/12.jpg)
TABLE MAPPING: MEETING
![Page 13: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/13.jpg)
TABLE MAPPING: MEETING
![Page 14: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/14.jpg)
TABLE MAPPING: LINK TABLE
![Page 15: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/15.jpg)
LEVEL 2: BASIC QUERIES
![Page 16: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/16.jpg)
FILTER STATEMENTS
Slick
SQL
=== instead of ==
![Page 17: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/17.jpg)
FILTER STATEMENTS
Slick
BracketsPut || or && at end of line
↵
![Page 18: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/18.jpg)
SORTING
Slick
SQL
![Page 19: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/19.jpg)
EXISTS
Slick
SQL
![Page 20: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/20.jpg)
DEFINING THE RESULT
Slick
SQL
Result
![Page 21: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/21.jpg)
DEFINING THE RESULT
Slick
SQL
Result
![Page 22: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/22.jpg)
DEFINING THE RESULT
Slickmeetings.list List[Meeting]meetings.first Meeting or NoSuchElementExceptionmeetings.firstOption Option[Meeting]
![Page 23: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/23.jpg)
LEVEL 3: ADVANCED QUERIES
![Page 24: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/24.jpg)
INNER JOIN
Slick
SQL
Result
![Page 25: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/25.jpg)
INNER JOIN (RESULT MAPPING)
Slick
Result
![Page 26: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/26.jpg)
OUTER JOINS (THE PROBLEM)
Slick
![Page 27: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/27.jpg)
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](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/28.jpg)
OUTER JOINS
Slick
Result
![Page 29: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/29.jpg)
OUTER JOINS (RESULT TRANSF.)
Slick
![Page 30: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/30.jpg)
THE ? FUNCTION
Solution expected somewhere this year
![Page 31: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/31.jpg)
LEVEL 4: INSERT/UPDATE/DELETE
![Page 32: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/32.jpg)
INSERT
Slick
SQL
![Page 33: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/33.jpg)
UPDATE
Slick
SQL
![Page 34: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/34.jpg)
DELETE
Slick
SQL
![Page 35: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/35.jpg)
LEVEL 5: SLICK + PLAY
![Page 36: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/36.jpg)
APPLICATION.CONF
![Page 37: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/37.jpg)
DATABASE AGNOSTIC IMPORTS
![Page 38: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/38.jpg)
DB WRAPPER
![Page 39: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/39.jpg)
LEVEL 6: INTEGRATION TESTING
![Page 40: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/40.jpg)
TABLE CREATION
Using Play-Slick plugin classes
![Page 41: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/41.jpg)
IN-MEMORY DATABASE CONFIG
![Page 42: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/42.jpg)
TEST DATA SETUP
Just use Slick…
![Page 43: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/43.jpg)
CONCLUSION
![Page 44: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/44.jpg)
THOUGHTS ON SLICK
+ Lightweight+ Level of control+ Production ready
- Documentation- Generated Queries (readability)
![Page 45: Slick - The Structured Way](https://reader038.vdocuments.us/reader038/viewer/2022102815/554f5640b4c905524c8b51b6/html5/thumbnails/45.jpg)
DevelopmentCoachingTraining
Hello Scala seminar June 25th 2014
Fast Track to Scala October 09th 2014
Fast Track to Akka with Scala November 04th 2014
CONTACT US