有哪些方法可以使用Clojure中的数据库?
我从Clojure知道你可以用Java做任何事情,但这意味着我最终可能会使用与Clojure简单相冲突的过于复杂的东西(比如Hibernate).有什么建议或意见吗?
Bri*_*per 19
clojure-contrib有一个sql库,它是JDBC(java.sql.DriverManager)的瘦包装器.随附的测试文件包含一些使用示例.
mik*_*era 14
我现在(截至2011年底)推荐Korma - "Clojure的美味SQL"
这是一个漂亮的小SQL DSL,这是网站上的一个例子:
(select users
(aggregate (count :*) :cnt)
(where (or (> :visits 20)
(< :last_login a-year-ago))))
Run Code Online (Sandbox Code Playgroud)
SQL数据库的最新和最好的似乎是HoneySQL和Yesql.
HoneySQL是一个非常优雅的DSL来生成SQL查询.有传闻它甚至可以修改高度优化的语句,请参阅2015年2月24日的clojure-group线程" 当前最佳的JDBC库? ".
Niels van Klaveren在上述帖子中说:
"基本上,它[HoneySQL]生成SQL脚本以重新链接外键引用以清理数据库中的重复项.它需要一个honeysql select查询,其中包含(至少)一个from
表,一个group-by
和一个order-by
子句作为基本定义,需要考虑什么双重,以及应保留记录的顺序.结合JDBC元数据,查询有效地被重写以生成:
为了创造最佳的表演,但仍独立于数据库的SQL,我必须有额外的条款一样延伸honeysql OVER
和PARTITION BY
.我不会说这是微风,但似乎工作得很好.
...
这将SQL(有时)GB的脚本减少到几百行SQL,有一次运行时间为19小时到1.5分钟."
另一方面,Yesql旨在实现完全简单.它定义了一些加载参数化文件的.sql
函数.
它的网页提到了以下"USP":
(raw-sql "some('funky'::SYNTAX)")
功能.