匹配所有键/ val对

时间:2018-01-23 14:41:02

标签: clojure hugsql

原始查询:

-- :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';

我可以想到一些丑陋的方法来实现这个目标,但很可能我忽略了一些很好的方法来做到这一点。

2 个答案:

答案 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"})

请参阅: