ScalikeJDBC
Slick
Our great sponsors
ScalikeJDBC | Slick | |
---|---|---|
4 | 17 | |
1,254 | 2,638 | |
0.2% | 0.3% | |
8.9 | 8.6 | |
1 day ago | 9 days ago | |
Scala | Scala | |
Apache License 2.0 | BSD 2-clause "Simplified" License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
ScalikeJDBC
- Query DSL in Scala 3
-
From First Principles: Why Scala?
I have had poor experiences with "fancy" SQL libraries in multiple languages when I go past basic operations. This includes Slick and Quill in Scala.
I don't remember what the problems were with Slick that leave such a bad feeling when I hear its name -- that was 5 years ago -- but I had problems with Quill just last year. I was trying to use it to generate an efficient "in" query against a two column composite primary key, and nothing seemed to work. Since it uses macro magic, one of my attempts triggered an internal compiler error instead of normal compiler feedback.
I ended up dropping Quill for ScalikeJDBC:
It seems to be less popular/active than other libraries, but it is dead simple to use, even for developers new to Scala. I write exactly the SQL I want just like I would in psql. There is little-to-no magic [1]. I think that the only slightly magical feature I use is ensure that variable interpolation into SQL ("SQLInterpolation") prevents injection attacks.
[1] It actually has capabilities to automatically map tables/columns into different structures and generate code for you, but my team doesn't use any of that. We just write SQL.
Slick
- How many people/companies are fully on Scala 3?
-
First Slick prerelease for Scala 3!
Made a PR on slick to document this https://github.com/slick/slick/pull/2760 (workaround is quite easy, you can just define def tupled = (apply _).tupled in the companion object of the case class and it will also compile for all Scala versions).
-
Sketch of a Post-ORM
The Scala ecosystem has a few ways to do composable type-safe query building, e.g. Slick[0] or more recently Quill[1]. . I believe both also have ways to do compile-time string interpolation (e.g. sql"""select * from users where id = ${user.id}""") which generate prepared statements (I know Slick does prepared statements. Quill has similar macros but I haven't looked into how safe they are to use).
-
Database abstraction library which allows a clean domain model
With all this in mind, I landed at the first candidate: slick from https://scala-slick.org/ that you all probably know.
-
Scala 3 migration: 7 benefits that outweigh the risks
I think Slick's current priority is also getting in Scala 3 support: https://github.com/slick/slick/issues/2177
-
Slick 3.4.x is here!
Future releases might not be announced here. To get notified, go to https://github.com/slick/slick, click the Watch dropdown button at the top, select Custom, check Releases, and click Apply.
-
Is there any good resource for learning Slick (3.x)?
https://github.com/slick/slick/pull/2097 now I use slightly lower version of slick so this might be an upgrade that resolves (I do recall using it in 21 and it was still buggy and I filed a ticket, which I cannot find at the moment), but given a complex enough query (we have one in PROD which has tons of flexibility in terms of filters that can be passed in) but it also makes for complex code.
-
Slick 3.4.0 is imminent
I started writing a reply but then I realized it would be long and depends on exactly what you mean, so maybe it's better to post the question in https://github.com/slick/slick/discussions/categories/questions?
You can see the draft release notes here and the upgrade guide at https://scala-slick.org/doc/prerelease/upgrade.html#upgrade-from-3-3-x-to-3-4-0. The latest docs are at https://scala-slick.org/doc/prerelease/index.html.
What are some alternatives?
doobie - Functional JDBC layer for Scala.
Quill - Compile-time Language Integrated Queries for Scala
Squeryl - A Scala DSL for talking with databases with minimum verbosity and maximum type safety
Clickhouse-scala-client - Clickhouse Scala Client with Reactive Streams support
Anorm - The Anorm database library
Sorm - A functional boilerplate-free Scala ORM
cats-effect - The pure asynchronous runtime for Scala
Phantom - Schema safe, type-safe, reactive Scala driver for Cassandra/Datastax Enterprise