この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Java8標準機能を使用したライブラリ
Speedmentとは
Speedmentとは、「JavaでのDBアクセスを楽しく簡単に行うためのライブラリ」とのことです。
Java8標準のStreamsを使用して実装するのが特徴で、下記のようなイメージで直感的に使用することができます。
//公式サイトのサンプルのまま
List<User> youngUsers = speedment.managerOf(User.class)
.stream()
.filter(User.AGE.lessThan(18))
.collect(toList());
↑のコードをみるだけでも、なんとなく使い方が想像できますね。
なお、SpeedmentにはOSS版とエンタープライズ版があり、OSS版はMySQL/MariaDBがサポートされています。(Java8以降対応)
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.10.5
- Java : 1.8.0_51
- MySQL : 5.6.25
Speedmentを使ってみる
1.DB環境構築
まずは環境の用意をしましょう。今回使用するDBをMySQLのコマンドラインツールで作成しておきます。
% mysql -u <ユーザー> -p
mysql > create database speedment;
mysql > use speedment;
mysql > create table User (id int not null primary key auto_increment , name varchar(100));
mysql > insert into User values(1,'taro');
mysql > insert into User values(2,'hanako');
ここではspeedmentデータベースを作成し、シンプルなUserテーブルとサンプルデータを作成しました。
2.プロジェクト作成
次に、Mavenを使用したプロジェクトを作成します。
IDEを使って作成してもいいし、archetype:generateのJavaプロジェクトを使ってもいいので、Javaのプロジェクトを作成します。
pom.xmlは下記のようにspeedmentの依存ライブラリ(とplugin)を追記しましょう。
・
・
<!-- dependencies内 -->
<dependency>
<groupId>com.speedment</groupId>
<artifactId>speedment</artifactId>
<version>2.2.2</version>
</dependency>
・
・
<!-- plugins内 -->
<plugin>
<groupId>com.speedment</groupId>
<artifactId>speedment-maven-plugin</artifactId>
<version>2.2.2</version>
</plugin>
・
・
3.GUIツールでJavaファイルの生成
Get Startedによると、GUIツールをつかってモデル等必要なファイルを生成します。
下記コマンドを実行し、GUIツールを起動しましょう。
% mvn speedment:gui
先ほど作成したDBにアクセスするための情報を入力し、connectボタンを押します。
下記画面でGenerate codeボタンを押すと、DBスキーマに応じて必要なJavaクラスが生成されます。
ちなみに、
% mvn speedment:generate
とすると、GUIツールは起動せずにJavaファイルの生成だけが実行される様子。
4.Javaファイルの実装
生成されたファイルを使用してDBアクセスしてみましょう。
まずは下記のようにSpeedmentを初期化し、Userテーブルにアクセスしてみます。
Speedment speedment = new SpeedmentApplication().build();
Manager<User> users = speedment.managerOf(User.class);
検索はこんな感じ
//NAMEがsyutaのレコードを取得
Optional<User> u = users.stream()
.filter(User.NAME.equal("syuta"))
.findAny();
//NAMEがsyutaでないレコード数を取得
int count = users.stream().filter(User.NAME.notEqualIgnoreCase("syuta")).count();
//NAMEがkenでないレコードにて対してSystem.out.printを実行
users.stream().filter(User.NAME.notEqualIgnoreCase("ken")).forEach(lu -> System.out.print(lu));
登録は次のように。Scannerでユーザーの入力をうけつけ、その情報を登録します。
final Scanner scn = new Scanner(System.in);
System.out.print("please input name.");
final String name = scn.nextLine();
try {
User u = users.newInstance().setName(name).persist();
System.out.print("Hello, " + u.getName() + "!");
} catch (SpeedmentException e) {
e.printStackTrace();
}
}
とりあえず登録と検索のコードをみてみました。
もっと詳細な使い方はどっかにないかなあとおもったんですが、ドキュメントが見つからず。
Githubみるしかないのかもしれません。
まとめ
今回はJava8の標準StreamsをつかってDBのにアクセスするライブラリ、Speedmentをつかってみました。
Java7やOracleを使用している場合、エンタープライズ版を使えば対応できるようです。
ツールもいろいろそろっており、なかなかおもしろいライブラリですね。