https://github.com/sake92/squery
Simple SQL queries in Scala 3
https://github.com/sake92/squery
h2-database jdbc mysql oracle-db postgresql scala scala3 sql sql-library
Last synced: 3 months ago
JSON representation
Simple SQL queries in Scala 3
- Host: GitHub
- URL: https://github.com/sake92/squery
- Owner: sake92
- License: apache-2.0
- Created: 2023-02-20T11:25:29.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-07-14T18:12:54.000Z (4 months ago)
- Last Synced: 2025-07-14T23:15:06.238Z (4 months ago)
- Topics: h2-database, jdbc, mysql, oracle-db, postgresql, scala, scala3, sql, sql-library
- Language: Scala
- Homepage: https://sake92.github.io/squery
- Size: 959 KB
- Stars: 19
- Watchers: 4
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- awesome-scala - squery - activity/y/sake92/squery) (Table of Contents / Database)
- fucking-awesome-scala - squery - activity/y/sake92/squery) (Table of Contents / Database)
- fucking-awesome-scala - squery - activity/y/sake92/squery) (Table of Contents / Database)
README
# squery
Simple SQL queries in Scala 3.
No DSLs, no fuss, just plain SQL.
Supports *any* JDBC driver.
Additional support for Postgres, MySql, MariaDb, Oracle, H2.
Scastie example: https://scastie.scala-lang.org/JArud6GGSLOmYyxCNsNdNw
> See also https://github.com/sake92/mill-squery for generating boilerplate models and DAOs automatically from db.
## Hello world:
```scala
// table rows
case class Customer(id: Int, name: String) derives SqlReadRow
case class Phone(id: Int, number: String) derives SqlReadRow
// joined row
case class CustomerWithPhone(c: Customer, p: Phone) derives SqlReadRow
val ds = JdbcDataSource()
ds.setURL("jdbc:h2:mem:")
val ctx = SqueryContext(ds)
ctx.run {
val res: Seq[CustomerWithPhone] = sql"""
SELECT c.id, c.name,
p.id, p.number
FROM customers c
JOIN phones p ON p.customer_id = c.id
""".readRows[CustomerWithPhone]()
}
```
---
## Generator
You can generate boilerplate code for `Row`s and `DAO`s.
### Mill plugin
See https://github.com/sake92/mill-squery
### CLI
You can use `squery-cli` with Coursier launcher to generate your sources:
```shell
cs launch ba.sake::squery-cli:0.8.1 -M ba.sake.squery.cli.SqueryMain -- \
--jdbcUrl jdbc:h2:... \
--baseFolder src \
--schemaMappings public:com.example.public \
--schemaMappings myschema:com.example.myschema \ # this is a repeatable argument
# these are optional:
-- colNameIdentifierMapper camelcase \ # or noop
-- typeNameMapper camelcase \ # or noop
-- rowTypeSuffix Row \
-- daoTypeSuffix Dao
```
### Code
You can use `squery-generator` library to generate code directly.
This is handy when using Ammonite to explore a database structure and its contents.
It can also be used to generate source code manually in scala-cli or in your project (if you dont like CLI or mill plugin).