Cloudant Java Client がとってもクール
IBM Cloud には Cloudant という NoSQL タイプの DBaaS があります.
※ちなみに Cloudant はライト・アカウントでも使えます.
この Cloudant の、Java 用 SDK が実はかなりクールな作りになっています.
今回は、この Java 用 SDK の派生版である Spring 用 SDK を使ってみたいと思います.
build.gradle
dependencies {
compile('com.cloudant:cloudant-spring-boot-starter:latest.release')
}
application.yml
Spring Boot 用 SDK では、認証情報を YAML に持つことができます.
cloudant:
username: XXXXX-YYYY-4cb6-aa85-191d59f8ff6d-bluemix
password: XXXX5f90YYYYc5387880b20aaea0edca2c09
url: https://XXXXX-YYYY-4cb6-aa85-191d59f8ff6d-bluemix:XXXX5f90YYYYc5387880b20aaea0edca2c09@XXXXX-YYYY-4cb6-aa85-191d59f8ff6d-bluemix.cloudant.com
使い方
まずは読み込み処理になります.
@Autowired
private CloudantClient client;
Database database = client.database("employees", false);
List employees = database.query(new QueryBuilder(and(
eq("company_num", companyNum), eq("department_num", departmentNum)))
.sort(Sort.asc("employee_num"))
.fields("employee_num", "name", "age", "sex")
.build(), Employee.clas);
--SQL に対応させるとこんな感じ
SELECT employee_num, name, age, sex
FROM employees
WHERE company_num = companyNum AND department_num = departmentNum
ORDER BY employee_num ASC
Autowired した CloudantClient から Database を生成します.
Database では QueryBuilder を用いて生成したクエリを実行できます.
この query ですが、以前は文字列のクエリ文を指定する形式でした.
メソッドチェーンになったことで記述性・可読性ともに高くなったかと思います.
ちなみに and などの Operation クラスは以下のものが使えます.
- and
- or
- not
- nor
eq などの Expression クラスは以下のものが使えます.
- lt(小なり)
- lte(小なりイコール)
- eq(イコール)
- ne(NOTイコール)
- gte(大なりイコール)
- gt(大なり)
- exists(SQL の EXISTS?)
- type(型判定?)
- in(SQL の IN?)
- nin(SQL の NOT IN?)
- size(?)
- mod(剰余?)
- regex(正規表現?)
- all(?)
想像以上にたくさんありました…
かなり表現力高く色々書けそうです.
次は書き込み処理になります.
database.post(object);
Object を指定するだけ、単純明快ですね.
最後に更新処理になります.
database.update(object);
基本的には書き込み処理と同じです.
ただ、注意しなくてはいけないのが、Object には 必ず _id と _rev フィールドが含まれている必要があります.これがないと更新エラーになってしまいます.
(_id, _rev は主キーのようなものです)
メソッドチェーンがクールすぎて久しぶりに使っていて楽しいライブラリでした.
以上です.