Simple Persistence for Javaを使ってみた
マイコミジャーナルでも紹介されている"Simple Persistence for Java"を使ってみた。
「Simple Persistence for Java」 http://netmind.hu/persistence/index.php
ちなみに、通称、BeanKeeperと呼ばれているようだ。
設定ファイルが不要で、テーブルの事前準備も不要(利用時にテーブルがなければ、勝手に作成される)。
<手順>
1. 以下から、2007/05/06時点での最新版beankeeper-2.3.0.tar.gzをダウンロードする。
http://netmind.hu/persistence/download.php
解凍して出来た以下のjarファイルにクラスパスを通す
・beeankeeper-2.3.0.jar ・lib/runtime/java-cup-11-runtime.jar ・lib/runtime/log4j-1.2.8.jar
2. 今回は、データベースとしてhsqldb(1.8.0.7)を使う。
http://hsqldb.org/
ダウンロードしたhsqldb_1_8_0_7.zipを解凍して、その中にあるhsqldb/demo/runServer.batをダブルクリックして、サーバモードで起動しておく。また、hsqldb.jarにもクラスパスを通しておく。
3.永続化対象のBeanの準備
sample.Customer
package sample; public class Customer{ private int id = 0; private String name = null; private String email = null; public Customer(){ super(); } public Customer(int id ,String name ,String email){ super(); this.id = id; this.name = name; this.email = email; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString(){ return "Customer [id=" + id + ", name=" + name + ", email=" + email +"]"; } }
4. "Simple Persistence for Java" を使うソースを作成
sample.BeanKeeperTest
package sample; import hu.netmind.persistence.Store; import java.util.Iterator; import java.util.List; public class BeanKeeperTest { private Store store = null; public static void main(String[] args) { BeanKeeperTest keeper = new BeanKeeperTest(); //初期処理 keeper.init(); //一旦、全データを削除 keeper.deleteAll(); //追加してみる keeper.save(new Customer(1,"山田太郎","taro@test")); keeper.save(new Customer(2,"山田次郎","jiro@test")); keeper.save(new Customer(3,"山田三郎","saburo@test")); keeper.output();//内容をコンソールに出力 //山田太郎のメールアドレスを変更する Customer customer = keeper.find(1);//id=1で検索し、Customerオブジェクトを取得 customer.setEmail("yamada_taro@test");//取得したCustomerオブジェクトのメールアドレスを変更 keeper.save(customer);//保存 keeper.output();//内容をコンソールに出力 //終了処理 keeper.destroy(); } private void output(){ List customers = findAll(); System.out.println("----------------------"); for (Iterator i = customers.iterator(); i.hasNext();) { Customer customer = (Customer) i.next(); System.out.println(customer); } } private void init(){ //Storeインスタンスの生成。全ての操作はこのStoreクラスを経由して行う store = new Store("org.hsqldb.jdbcDriver","jdbc:hsqldb:hsql://localhost"); } private void destroy(){ store.close(); } private void save(Customer customer){ store.save(customer); } private List findAll(){ //id順で、Customerを全件取得 return store.find("find Customer order by id"); } private void deleteAll(){ List customers = store.find("find Customer"); if(customers!=null){ for (Iterator i = customers.iterator(); i.hasNext();) { Object customer = i.next(); store.remove(customer); } } } private Customer find(int id){ //findSingleの場合は結果を1件のみ返します //引数には、「find + クラス名 + 検索条件」の文字列を渡します return (Customer) store.findSingle("find Customer where id =" + id ); } }
5. BeanKeeperTestの実行結果
コンソールの内容
−−−−−−−−−−−−−−−−−− Customer [id=1, name=山田太郎, email=taro@test] Customer [id=2, name=山田次郎, email=jiro@test] Customer [id=3, name=山田三郎, email=saburo@test] −−−−−−−−−−−−−−−−−− Customer [id=1, name=山田太郎, email=yamada_taro@test] Customer [id=2, name=山田次郎, email=jiro@test] Customer [id=3, name=山田三郎, email=saburo@test]
作成されたテーブル
CLASSES CUSTOMER IDS NODES TABLEMAP
<感想>
作成されるテーブルの形式が独特なので、既にテーブルが存在するシステムへの適用は難しそう。でも、ちょっとした自作アプリとかには有用だと思う。O/Rマッピングライブラリというよりは、オブジェクト永続化ライブラリと考えた方がイメージがわきやすいかも...。
以下の画像は、EclipseのDBViewerプラグインで、hsqldbのテーブル一覧を表示させたところ。
2007.05.17追記
Simple Persistence for Java によって、識別子が自動的に付与される。その識別子を取得するためには、永続化対象のBeanに、persistenceId もしくは、persistenceID というフィールドを追加する。