[Seasar-user:11839] Re: 【 DBFlute 】生成コードと DB 要素のネーミングの対応関係について

kubo [E-MAIL ADDRESS DELETED]
2007年 11月 28日 (水) 22:53:02 JST


久保です。

> >- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> >データベース       → Javaのプロパティ / C#のプロパティ
> >
> >MEMBER_STATUS      → memberStatus / MemberStatus
> >MEMBER_STATUS_NAME → memberStatusName / MemberStatusName
> >- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> >
> >というように"_"は削除されます。
> 
>  はプロパティに関係なく適用されるルール。
> 
> >そして関連情報ですが、もしデータベース側が"_"区切りでない場合は、
> >デフォルトでは以下のようになってしまいます。
> >
> >- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> >データベース       → Javaのプロパティ / C#のプロパティ
> >
> >MemberStatus       → memberstatus / Memberstatus
> >MemberStatusName   → memberstatusname / Memberstatusname
> >- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> 
>  は、プロパティで振る舞いが変わるルール。
> 
>  という理解でよろしいでしょうか?(一応ご確認)

はい、OKです。

>  リフレクションを使って設定ファイルに記載のテーブル名、列名
>  からBehavior、ConditionBean、Entityなどを操作するプログラ
>  ムを作成しており、命名規則が気になった次第です。

なんかすごいことされているみたいですね...
細かいレベルで迷うことがあれば、遠慮なく聞いてくださいね。
(本当に聞かないとわからないことがありますので...)


ちなみにそういった場合に自分はDBMetaよく使います。
例えば、“MEMBER_STATUS”という文字列から“memberStatus”を取得したい場合は、

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
DBMeta dbmeta = DBMetaInstanceHandler.findDBMeta("MEMBER_STATUS");
String tablePropertyName = dbmeta.getTablePropertyName();
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

で取得できます。これであれば、「M_STATUS」といった場合の
JavaBeans規約の扱いも解決されます。
(getTablePropertyName()が「MStatus」を戻す)
さらに、“MEMBER_STATUS_NAME”というカラムのEntityのGetter/Setterの
java.lang.reflect.Methodも取得することが可能です。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
ColumnInfo columnInfo = dbmeta.findColumnInfo("MEMBER_STATUS_NAME");
Method getter = dbmeta.findGetter();// entity.getMemberStatusName();
Method setter = dbmeta.findSetter();// entity.setMemberStatusName();
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 


また、テーブル名から該当のBehaviorを取得する場合は、
BehaviorSelector#byName()から取得できます。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
BehaviorReadable bhv = behaviorSelector.byName(tableDbName);
ConditionBean cb = bhv.newConditionBean();// CBの生成
cb.addOrderBy_PK_Desc();// PrimaryKeyの降順
List<Entity> entityList = bhv.readList(cb);// リスト検索
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

そのままbhvからbhv.getDBMeta()という感じで該当テーブルの
DBMetaを取得することもできますし、その他にも色々と
抽象化された世界での実装を楽にするメソッドが用意されています。
今後もこの辺の支援機能は充実させていきたいと考えております。


// DBFluteの基本ExampleのSVNリポジトリのURL
https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-basic-example

こちらの「DBMetaInstanceHandlerTest」・「BehaviorSelectorTest」に、
取り急ぎの実装例を書いておきました。ぜひご覧になられて下さい。


ただ、この辺は多少の手直し等があるので(非推奨など)、
できればDBFluteは、最新に近いバージョンを使われることをお奨めします。
(0.5.7 or もうすぐリリースの0.5.8)

最新のDBFluteでもS2Dao-1.0.45で動作します。
(build-xxx.propertiesでしっかりバージョンを指定をすれば)



Seasar-user メーリングリストの案内