[220209] clojure next.jdbc tips
Table of Contents
1 소개
clojure 의 honeysql을 사용하면서 기록하는 팁들… (수시로 업데이트 될 것)
2 {:return-keys true}
next.jdbc는 기본적으로 insert를 한 이후에 생성된 ID를 리턴하지않고 next.jdbc/update-count
를 리턴한다.
하지만 {:return-keys true}
를 붙이면 생성된 ID를 리턴할 수 있다.
(jdbc/execute-one! conn ["INSERT ,,,"] {:return-keys true})
만약에 여러 개를 인서트했다면 아래처럼 만들면 된다.
(jdbc/execute! conn ["INSERT INTO test_table(column) VALUES ('A'), ('B')"] {:return-keys ["column"]})
3 next.jdbc.result-set/as-unqualified-kebab-maps
예를들어 위에 {:return-keys true}
를 이용하면 {:GENERATED_KEY ,,,}
와 같은 형태로 리턴된다.
클로저에서는 케밥케이스를 선호하므로 아래처럼 작성하면 된다.
(ns db (:require [next.jdbc :as jdbc] [next.jdbc.result-set :as rs])) (jdbc/execute-one! conn ["INSERT ,,,"] {:return-keys true :build-fn rs/as-unqualified-kebab-maps})
4 next.jdbc/unqualified-snake-kebab-opts
이것은 내부 구현을 보는 것이 더 이해가 쉽겠다.
(def unqualified-snake-kebab-opts "A hash map of options that will convert Clojure identifiers to snake_case SQL entities (`:table-fn`, `:column-fn`), and will convert SQL entities to unqualified kekbab-case Clojure identifiers (`:builder-fn`)." {:column-fn ->snake_case :table-fn ->snake_case :label-fn ->kebab-case :qualifier-fn ->kebab-case :builder-fn rs/as-unqualified-kebab-maps})
사용법은 아래와 같다.
(ns db (:require (next.jdbc :as jdbc))) (jdbc/execute! conn sql jdbc/unqualified-snake-kebab-opts)