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