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

佐藤聖 [E-MAIL ADDRESS DELETED]
2007年 11月 28日 (水) 23:17:58 JST


佐藤(聖)です。

久保さん、文中にコメントします。

2007/11/28 22:53:02 +0900 にkubo <[E-MAIL ADDRESS DELETED]>さんに頂いた
「[Seasar-user:11839] Re:【 DBFlute 】生成コードと DB 要素のネーミングの対応関係について」への返事です。
>久保です。
>
>> >- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>> >データベース       → Javaのプロパティ / C#のプロパティ
>> >
>> >MEMBER_STATUS      → memberStatus / MemberStatus
>> >MEMBER_STATUS_NAME → memberStatusName / MemberStatusName
>> >- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>> >
>> >というように"_"は削除されます。
>> 
>>  はプロパティに関係なく適用されるルール。
>> 
>> >そして関連情報ですが、もしデータベース側が"_"区切りでない場合は、
>> >デフォルトでは以下のようになってしまいます。
>> >
>> >- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>> >データベース       → Javaのプロパティ / C#のプロパティ
>> >
>> >MemberStatus       → memberstatus / Memberstatus
>> >MemberStatusName   → memberstatusname / Memberstatusname
>> >- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>> 
>>  は、プロパティで振る舞いが変わるルール。
>> 
>>  という理解でよろしいでしょうか?(一応ご確認)
>
>はい、OKです。
>
>>  リフレクションを使って設定ファイルに記載のテーブル名、列名
>>  からBehavior、ConditionBean、Entityなどを操作するプログラ
>>  ムを作成しており、命名規則が気になった次第です。
>
>なんかすごいことされているみたいですね...
>細かいレベルで迷うことがあれば、遠慮なく聞いてくださいね。
>(本当に聞かないとわからないことがありますので...)

 や、複雑ではあるのですが業務用件がほぼ無いという
 前提での設計ですので、ぎりぎり成り立ちそうという
 レベルだったりします。(以前ML上で少し書きましたが、
 参照のみ、かつ単純検索系ばかりです)

 が、この下の情報は非常に役に立ちそうです。
 既に実装自体は終盤なので直接使用するか分かりませんが、
 サンプル含めて是非勉強させていただきます。

 抽象的な実装をしている部分は、性質上コード量はかなり少
 ない部分なので、実装変更も視野に入れつつ、もし何かあれ
 ばご質問させてください。

以上、ありがとうございました!

>ちなみにそういった場合に自分は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 mailing list
>[E-MAIL ADDRESS DELETED]
>https://ml.seasar.org/mailman/listinfo/seasar-user
========================================================
 NEC 公共システム事業部  パッケージ開発第二グループ
 佐藤 聖 ([E-MAIL ADDRESS DELETED])
 内線番号  8-10-26538    文書メール番号 10-26500
 外線番号  (03)3798-2935 FAX 8-10-26509 (03)3798-6781
========================================================


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