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件ほど入れてみました。(当然ですが、テーブル作った後に再度DBFlutejdbcと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はどうするんだろうか)