slick - the structured way

Post on 10-May-2015

658 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

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

SlickThe Structured Way

YENNICK? YANNICK? JANNICK?

Reactive Applications ConsultantCertified Typesafe “Fast Track to Scala” trainer

@SlevinBEyennicktrevels.comYennick.Trevels@xploregroup.be

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

Yennick.Trevels@xploregroup.be

CONTACT US

top related