[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)