DBFlute二度目のチャレンジ(2)
前回からの変更。
- データモデリングをやり直して、テーブルの数を16まで圧縮(未知のチャレンジにしては、まだ多いっつの)
- 設定ファイルを以下のように変更&追記
torque.packageBase = jp.xet.cepoc torque.baseCommonPackage = dbflute.allcommon torque.baseBehaviorPackage = dbflute.bsbhv torque.baseDaoPackage = dbflute.bsdao torque.baseEntityPackage = dbflute.bsentity torque.conditionBeanPackage = dbflute.cbean torque.extendedBehaviorPackage = dbflute.exbhv torque.extendedDaoPackage = dao torque.extendedEntityPackage = entity torque.dbfluteDiconPackageName = ../resources
パッケージ構成は、Teeda準拠ということで、こっちの方がいいかな? と思って、さらに変更。こうすれば、daoとentityはTeeda準拠パッケージで、その他はdbfluteパッケージ内に作ってくれます。パッケージ構成をいじったので、jdbc.diconの設定も変更を忘れずに。
ん。そういえば、dbflute.dicon は、app.diconに記述しないといけないんでないかな? ということで調査。オフィシャルマニュアルのBasic Propertiesで発見。
※Applicationが利用するxxx.diconがdbflute.diconをIncludeする必要があります。
例えば、app.diconがdbflute.diconをincludeするのが一般的です。
OKです。
起動&検証
確認のためにCompileされたDaoでSelectしてみて下さい。
テーブルに適当なデータを3件ほど入れてみました。(当然ですが、テーブル作った後に再度DBFluteでjdbcとgenerateを実行しておくこと。)
CREATE TABLE test_entity ( id VARCHAR(8), name TEXT ); ALTER TABLE test_entity ADD PRIMARY KEY (id); INSERT INTO test_entity VALUES ('aaaa', 'えーえーえーえー'); INSERT INTO test_entity VALUES ('bbbb', 'びーびーびーびー'); INSERT INTO test_entity VALUES ('ffff', 'えふえふえふえふ');
まずは、TeedaのPageクラスでDaoをインジェクションしてもらう。Daoはインターフェイスなので、setterを用意するだけでインジェクションしてくれるハズ。
そしてまずは、prerender()内で、色々検索をやってみる。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:te="http://www.seasar.org/teeda/extension" xml:lang="ja" lang="ja"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>DBFlute test</title></head> <body> <p><span id="resultMsg">結果表示場所</span></p> </body> </html>
package jp.xet.cepoc.web.test; import java.util.List; import jp.xet.cepoc.dao.TestEntityDao; import jp.xet.cepoc.dbflute.allcommon.cbean.coption.LikeSearchOption; import jp.xet.cepoc.dbflute.cbean.TestEntityCB; import jp.xet.cepoc.entity.TestEntity; public class DftestPage { private String resultMsg = "結果:"; private TestEntityDao dao; public String getResultMsg() { return resultMsg; } public void setResultMsg(String resultMsg) { this.resultMsg = resultMsg; } public void setDao(TestEntityDao dao) { this.dao = dao; } public String initialize() { return null; } public String prerender() { if(dao == null) { resultMsg = "daoがnull"; } else { // PrimaryKeyによる一意検索 TestEntity entityAaaa = dao.getEntity("aaaa"); if(entityAaaa != null) { resultMsg += " " + entityAaaa.getName(); } // ConditionBeanによる一意検索 TestEntityCB cb = new TestEntityCB(); cb.query().setId_Equal("bbbb"); TestEntity entityBbbb = dao.selectEntity(cb); if(entityBbbb != null) { resultMsg += " " + entityBbbb.getName(); } // 結果が1つでなかった場合、先頭の1つが採用? cb = new TestEntityCB(); cb.query().setName_LikeSearch("%ー%", new LikeSearchOption()); TestEntity entityFfff = dao.selectEntity(cb); if(entityFfff != null) { resultMsg += " " + entityFfff.getName(); } // Like検索 List<TestEntity> entityList = dao.selectList(cb); if(entityList != null) { resultMsg += " #Like検索# "; for(TestEntity entity : entityList) { resultMsg += entity.getName(); } } } return null; } }
null判定をしておかないと、一致するデータが無かった場合にNullPointerExpectionが出ます。
実行した結果は以下の通り、成功です。
結果: えーえーえーえー びーびーびーびー えーえーえーえー #Like検索# えーえーえーえーびーびーびーびー
- で、ここまで出来た。やりたいことは色々あるのですが、「次」は何ができるようになればいいのでしょう。
- INSERT, UPDATE, DELETE かな…。
- それとも複雑なSELECT? (複数のテーブルを結合したりするSELECTはどうするんだろうか)