ScalikeJDBC
treelog
Our great sponsors
ScalikeJDBC | treelog | |
---|---|---|
4 | 1 | |
1,253 | 219 | |
0.2% | - | |
8.9 | 7.7 | |
7 days ago | 8 days ago | |
Scala | Scala | |
Apache License 2.0 | MIT 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.
treelog
-
From First Principles: Why Scala?
The call stack is "magic" built into the language, so as soon as you're not using the "blessed" way of error handling, you lose it and need to rebuild the same functionality "by hand".
I agree that some kind of logical call stack is a very useful thing to have, and I'd recommend implementing something along the lines of https://github.com/lancewalton/treelog that provides it.
What are some alternatives?
Slick - Slick (Scala Language Integrated Connection Kit) is a modern database query and access library for Scala
doobie - Functional JDBC layer for Scala.
Quill - Compile-time Language Integrated Queries for Scala
Anorm - The Anorm database library
Squeryl - A Scala DSL for talking with databases with minimum verbosity and maximum type safety
Relate - Performant database access in Scala
AnormCypher - Neo4j Scala library based on Anorm in the Play Framework
PostgreSQL and MySQL async
Clickhouse-scala-client - Clickhouse Scala Client with Reactive Streams support
kotlin-spark-api - This projects gives Kotlin bindings and several extensions for Apache Spark. We are looking to have this as a part of Apache Spark 3.x
Casbah - Casbah is now officially end-of-life (EOL).
Scala-Forklift - Type-safe data migration tool for Slick, Git and beyond.