Upload
yennick-trevels
View
660
Download
2
Tags:
Embed Size (px)
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.
Citation preview
SlickThe Structured Way
YENNICK? YANNICK? JANNICK?
Reactive Applications ConsultantCertified Typesafe “Fast Track to Scala” trainer
WHY SLICK?
Option(Anorm).orElse(Hibernate).orElse(Slick)
Pure ScalaImmutable data structuresDB agnostic codeType safety
TALK MOTIVATION
MEAT OF THE TALK
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
IMPORTS
Database specific
Database agnostic import use Play-Slick plugin
SESSION SCOPE
TRANSACTION SCOPE
SAMPLE DATABASE
MEETING
DOCUMENT ATTENDEE_LINK
ATTENDEE
ID … MEETING_ID
ATTENDEE_ID
ID … MEETING_ID
ID …
ID …
LEVEL 1: MAPPING TABLES
TABLE MAPPING: MEETING
TABLE MAPPING: MEETING
TABLE MAPPING: LINK TABLE
LEVEL 2: BASIC QUERIES
FILTER STATEMENTS
Slick
SQL
=== instead of ==
FILTER STATEMENTS
Slick
BracketsPut || or && at end of line
↵
SORTING
Slick
SQL
EXISTS
Slick
SQL
DEFINING THE RESULT
Slick
SQL
Result
DEFINING THE RESULT
Slick
SQL
Result
DEFINING THE RESULT
Slickmeetings.list List[Meeting]meetings.first Meeting or NoSuchElementExceptionmeetings.firstOption Option[Meeting]
LEVEL 3: ADVANCED QUERIES
INNER JOIN
Slick
SQL
Result
INNER JOIN (RESULT MAPPING)
Slick
Result
OUTER JOINS (THE PROBLEM)
Slick
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
OUTER JOINS
Slick
Result
OUTER JOINS (RESULT TRANSF.)
Slick
THE ? FUNCTION
Solution expected somewhere this year
LEVEL 4: INSERT/UPDATE/DELETE
INSERT
Slick
SQL
UPDATE
Slick
SQL
DELETE
Slick
SQL
LEVEL 5: SLICK + PLAY
APPLICATION.CONF
DATABASE AGNOSTIC IMPORTS
DB WRAPPER
LEVEL 6: INTEGRATION TESTING
TABLE CREATION
Using Play-Slick plugin classes
IN-MEMORY DATABASE CONFIG
TEST DATA SETUP
Just use Slick…
CONCLUSION
THOUGHTS ON SLICK
+ Lightweight+ Level of control+ Production ready
- Documentation- Generated Queries (readability)
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