0

原始查询:

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

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

4

2 回答 2

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';
于 2018-01-23T14:54:59.147 回答
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"})

请参见:

于 2018-01-23T22:19:47.610 回答