allcommon

allcommonとは?

DBFluteランタイムと自動生成されるクラス(Entityなど)の架け橋となる Generateタスクで自動生成される業務依存の共通クラス です。

CDef
区分値の定義(ENUMの集まり)
DBCurrent
現在のDBの定義(種類)
DBFluteConfig
DBFluteのランタイム環境を調整するコンフィグ
DBFluteInitializer
DBFluteの初期化クラス (DIコンポーネント)
DBMetaInstanceHandler
DBMeta のインスタンスを扱うクラス
EntityDefinedCommonColumn
共通カラムが定義されている Entity のためのインターフェース
ImplementedBehaviorSelector
BehaviorSelector の標準的な実装クラス (DIコンポーネント)
ImplementedCommonColumnAutoSetupper
CommonColumnAutoSetupper の標準的な実装クラス (DIコンポーネント)
ImplementedInvokerAssistant
InvokerAssistant の標準的な実装クラス (DIコンポーネント)
ImplementedSqlClauseCreator
SqlClauseCreator の標準的な実装クラス (DIコンポーネント)

CDef

区分値機能を利用したときに、区分値の情報がENUMとして定義されるクラスです。

区分値は基本的にメソッド名解決のメソッドとして利用できるため、アプリケーションではあまり意識することは多くありませんが、 複数の区分値要素を指定するConditionBeanのInScopeやNotInScopeにおいては、このCDefを利用します。 また、DBFluteの区分値機能の届かない領域で区分値を利用するような場合はこのクラスを利用します。 (例えば、DBFluteが自動生成しないクラス(DTOなど)にて区分値を利用する場合)

e.g. CDefの利用 @Java
String code = CDef.MemberStatus.Formalized.code();

抽象的な取扱い

CDef自体は、CDef内で定義される全ての区分値で実装されるインターフェースであり、区分値を抽象的に取り扱うことができます。 (コードや名称などを抽象的に取得することができます)

e.g. CDefによる抽象的な取扱い @Java
CDef cdef = CDef.MemberStatus.Formalized;
String code = cdef.code();
String name = cdef.name();
String alias = cdef.alias();

Classification

CDef インターフェースは、DBFluteランタイム内の Classification インターフェースを拡張しています。この Classification インターフェースは、基本的にはDBFluteランタイム内部で抽象的に取り扱うために利用するもので、アプリで意識する必要はありません。

e.g. Classificationとして扱う @Java
Classification cls = CDef.MemberStatus.Formalized;

DefMeta

区分値自体を表現するENUMとして、DefMeta というクラスが用意されています。ClassificationMeta インターフェースを実装しており、codeOf() メソッドを抽象的に利用することができます。

e.g. DefMetaを利用して抽象的に codeOf() を利用 @Java
ClassificationMeta meta = CDef.DefMeta.MemberStatus;
Classification cls = meta.codeOf(code);

DefMeta は、区分値要素から取得から取得することもできます。

e.g. DefMetaを区分値要素から取得 @Java
ClassificationMeta meta = CDef.MemberStatus.Formalized.meta();

DBCurrent

アプリケーションでは、基本的に意識する必要のないクラスです。

現在のDBのタイプ(OracleやMySQLなど)を保持するクラスです。内部的には該当するDBの DBDef を保持します。内部情報を壊すようなプログラムを書いてはいけません。

DBFluteConfig

DBFluteのランタイム環境を調整するコンフィグです。

DBFluteInitializer

アプリケーションでは、基本的に意識する必要のないクラスです。

DBFluteを初期化するクラスです。内部的にはこのクラスのコンストラクタに初期化処理があります。 DIコンテナ経由でインスタンスが生成されるため、その時点で自動的に初期化処理が実行されます。 アプリケーションで new してはいけません。

初期化が終わると、(ロック掛け忘れ防止のために) DBFluteConfig にロックを掛けます。

Seasar(S2Container) 利用時

SqlLogRegistryの初期化(オプション)、そして、HotDeploy機能との相性を調整するために、 HotDeploy対象になって欲しくないクラスをHotDeploy対象外になるようにしています。

Spring Framework 利用時

Commons DBCP に対する DataSourceHandler の初期化処理が行われます。

Spring Framework - Commons DBCPの取扱い

DBMetaInstanceHandler

(staticメソッドで)テーブル名から対応する DBMeta インスタンスを取得するためのクラスです。 DBFluteの内部的には、ここから DBMeta を取得することが満載です。

アプリケーションではあまり意識する必要はありませんが、 アプリケーションで独自の仕組みを作る際に、テーブル名(だけ)から DBMeta の情報が欲しい場合に利用します。

テーブル名は、大文字小文字を区別なし、アンダースコアも吸収、スキーマ名やダブルクォーテーションの囲いも吸収されます。

e.g. DBMetaInstanceHandlerの利用 {テーブル名} @Java
DBMeta dbmeta = DBMetaInstanceHandler.findDBMeta("MEMBER_STATUS");
e.g. DBMetaInstanceHandlerの利用 {プロパティ名} @Java
DBMeta dbmeta = DBMetaInstanceHandler.findDBMeta("memberStatus");
e.g. DBMetaInstanceHandlerの利用 {スキーマ名付き} @Java
DBMeta dbmeta = DBMetaInstanceHandler.findDBMeta("EXAMPLEDB.MEMBER_STATUS");

DBMetaは、指定されたテーブルのものだけを初期化(クラスロード)します。 そうすることで、アプリケーション起動時一発目のDBアクセスで、全テーブルのDBMetaの初期化(クラスロード)が発生しないようにしています。 (DBFluteが内部でこのクラスを利用しています)

逆に一括で初期化(クラスロード)するためのメソッドもあります。アプリケーション起動と同時に初期化することで、 その後のDBアクセスのパフォーマンスを向上されるためのものです(例えば、結合環境、本番環境など)。 但し、それはこのクラスから直接呼び出すのではなく、BehaviorSelector に正式にアプリケーションで呼び出してもOKなメソッドがあります

EntityDefinedCommonColumn

共通カラムが定義されているテーブルの Entity を表現するインターフェースです。テーブルを意識せずに抽象的に共通カラムを取り扱うことができます。 Entity インターフェースを拡張したインターフェースとなっています。

共通カラムの自動設定も、リフレクションなしで、このインターフェース経由で値を設定しています。

ImplementedBehaviorSelector

BehaviorSelector の実装クラスです。

ImplementedCommonColumnAutoSetupper

アプリケーションでは、基本的に意識する必要のないクラスです。

ImplementedInvokerAssistant

アプリケーションでは、基本的に意識する必要のないクラスです。

ImplementedSqlClauseCreator

アプリケーションでは、基本的に意識する必要のないクラスです。

TODO jflute now writing