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 は主キーのようなものです)

 

メソッドチェーンがクールすぎて久しぶりに使っていて楽しいライブラリでした.
以上です.