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

Date: 2022-02-09 Wed 00:00

Author: Younghwan Nam

Created: 2024-12-21 Sat 16:39

Emacs 27.2 (Org mode 9.4.4)

Validate