原始查询:
-- :name select*-list
-- :command :query
-- :result :raw
-- :doc Select all lists.
-- parameters()
SELECT * FROM list;
我想传递任意键/值对并获得匹配结果。例如:
(select*-list db-spec {:name "Fruit" :type "Foo"})
应该导致:
SELECT * FROM list
WHERE name = 'Fruit'
AND type = 'Foo';
我可以想到一些丑陋的方法来实现这个目标,但很可能我忽略了一些很好的方法来做到这一点。
答案 0 :(得分:3)
JDBC有一些很好的快捷方式。其中一个是find-by-keys。它完全符合您的要求:获取键/值对的映射,并组成一组与WHERE
相关联的AND
子句:
(jdbc/find-by-keys db-spec :users {:name "John" :age 42 :city "Chita"})
将转向
select from users
where
name = 'John'
and age = 42
and city = 'Chita';
答案 1 :(得分:0)
以下是java-jdbc.sql
(require '[java-jdbc.sql :as sql])
(jdbc/query db-spec
(sql/select * :fruit (sql/where {:appearance "ripe"})))
;; -> ({:grade 8.4, :unit "carton", :cost 12, :appearance "ripe", :name "Plum"})
请参阅: