Par : François Armand (@fanf42)
Doobie se présente par l'accroche principled database access for an unprincipled world. C'est tout à fait intraduisible en français - et c'est bien dommage ! Car cette phrase résume tout l'esprit de cette surcouche de JDBC.
Grâce à Doobie, JDBC, l'incarnation de Java à la mode '90s, des variables globales mutables qui jouent avec des threads, devient une bibliothèque fonctionnelle de pures structures de données composables, échangeables, testables, raisonnables - et tout ceci avec du SQL. Car là où d'autres comme Slickont choisi la voie du mapping objets / base de données, non sans rappeler nos bons vieux ORM honnis, Doobie ne fait que rendre vos requêtes SQL de bonnes citoyennes d'applications fonctionnelles.
Utilisateur récent de Doobie, je me propose dans cette présentation de vous transmettre un retour d'expérience encore chaud et naïf, avec ses bonnes surprises, ses moins bonnes, et pourquoi pas un mot sur Slick 3.1.
10. Who’s talkin’ for why?
● 10 years of Scala
● CTO @Normation
● Lead-dev on Rudder
● chose Scala 7y ago for Rudder
Continuous Configuration
for Effective ComplianceFrançois ARMAND / @fanf42
11. ● 10 years of Scala
● CTO @Normation
● Lead-dev on Rudder
● chose Scala 7y ago for Rudder
Continuous Configuration
for Effective Compliance
Squeryl
François ARMAND / @fanf42
Who’s talkin’ for why?
12. ● 10 years of Scala
● CTO @Normation
● Lead-dev on Rudder
● chose Scala 7y ago for Rudder
Continuous Configuration
for Effective Compliance
Squeryl
JdbcTemplate
François ARMAND / @fanf42
Who’s talkin’ for why?
13. But what ?
● 10 years of Scala
● CTO @Normation
● Lead-dev on Rudder
● chose Scala 7y ago for Rudder
Continuous Configuration
for Effective Compliance
Squeryl
JdbcTemplate
François ARMAND / @fanf42
Who’s talkin’ for why?
14. Slick 3 ?
● Fairly popular, ~ default choice in 2016 for Scala world
● Let’s test it ! ⇒ ported ~ 50% of Rudder code to it.
15. ● Fairly popular, ~ default choice in 2016 for Scala world
● Let’s test it ! ⇒ ported ~ 50% of Rudder code to it.
● Does not work for us :
● Feels magic and ORM-y, with *Surprises*
○ in generated SQL
■ you can’t precisely control it (that’s the point)
○ in performance (using path of least resistance)
■ ex: run-time compilation for EACH request in the path of least resistance
○ with lift embeding type
■ i.e working with Rep[MyClass] in place of MyClass
● An awful lot of boilerplate
Slick 3 ?
20. Use Doobie.
It’s GREAT.
● A pure functional database access layer for Scala
● Mapping is a joy (actually make me smile)
Doobie
21. Use Doobie.
It’s GREAT.
● A pure functional database access layer for Scala
● Mapping is a joy (actually make me smile)
● No surprises :
○ it just works as expected.
○ Performance are ~ raw JDBC.
○ NO JDBC part is beyond reach.
■ Even dirty things about JDBC connection like SQLXML. Or variable number of params.
Doobie
22. Use Doobie.
It’s GREAT.
● A pure functional database access layer for Scala
● Mapping is a joy (actually make me smile)
● No surprises :
○ it just works as expected.
○ Performance are ~ raw JDBC.
○ NO JDBC part is beyond reach.
■ Even dirty things about JDBC connection like SQLXML. Or variable number of params.
● Rob Norris (@tpolecat) is über nice and helpful
Doobie
23. Use Doobie.
It’s GREAT.
● A pure functional database access layer for Scala
● Mapping is a joy (actually make me smile)
● No surprises :
○ it just works as expected.
○ Performance are ~ raw JDBC.
○ NO JDBC part is beyond reach.
■ Even dirty things about JDBC connection like SQLXML. Or variable number of params.
● Rob Norris (@tpolecat) is über nice and helpful
● It actually makes me like SQL
○ (it tooks 15 years, and PostgreSQL helps a lot)
Doobie
24. Use Doobie.
It’s GREAT.
● A pure functional database access layer for Scala
● Mapping is a joy (actually make me smile)
● No surprises :
○ it just works as expected.
○ Performance are ~ raw JDBC.
○ NO JDBC part is beyond reach.
■ Even dirty things about JDBC connection like SQLXML. Or variable number of params.
● Rob Norris (@tpolecat) is über nice and helpful
● It actually makes me like SQL
○ (it tooks 15 years, and PostgreSQL helps a lot)
Doobie
25. A pure functional database access layer for Scala
● everything is a value
● standard functional programming idioms apply
● Clear separation of concepts
○ (I won’t talk about Free Monad - oups)
30. Performance (especially in pure FP) matters
● The exact, 50 lines if you want,
SQL queries you want to write.
● PreparedStatement by default.
● Batch updates are given.
● Comparison with JDBC
31. Rob Norris @tpolecat
(like, he produced working code for SQLXML mapping. At 3 a.m. Just for me)
(OK, 3 a.m for my timezone. But still :)
is
extremely
nice and
helpful
actually
likes SQL
32. Yes. Really.
Savant word for
“Makes you love SQL -
No surprise, it just works”
Questions ?
The End