databaseInfoMap

databaseInfoMapとは?

スキーマのメタ情報を取得する上での接続情報や細かい設定を行うDBFluteプロパティ。DBFluteクライアントの dfprop 配下の databaseInfoMap.dfprop という名前のテキストファイルです。必須のプロパティであり、特に接続情報に関しては "自動生成する前に" 設定されることを前提としています。

DBMSによって設定の仕方や設定値などが様々に変わってくるので注意。

プロパティ

map型プロパティ で、様々な key-value 形式のプロパティを定義します。

以下、(*)の付いたプロパティは必須です。

driver (*)

JDBCドライバのクラス名(FQCN)。DBMSごとにクラス名が違います。

e.g. MySQLでのJDBCドライバのクラス名 @databaseInfoMap.dfprop
map:{
    ; driver   = com.mysql.jdbc.Driver
    ...
}

url (*)

DBに接続するためのJDBC URL。DBMSごとにURLの形式が違います。

e.g. MySQLでのJDBC URL, localhostのmaihamadbに3306ポートで接続、SSL接続OFF @databaseInfoMap.dfprop
map:{
    ...
    ; url      = jdbc:mysql://localhost:3306/maihamadb?allowPublicKeyRetrieval=true&sslMode=DISABLED
    ...
}

catalog

接続カタログ(データベース)。接続URLから自動判別される DBMS においては、空指定(定義なし)が許されます。サポートされている DBMS では基本的に自動判別されます。主に、サポートされない DBMS で DBFlute を利用する際に初めて指定が必要になるプロパティと想定されています。

schema

接続スキーマ。追加スキーマを取り扱っている場合は、このスキーマがメインスキーマとなります。 空指定が意味のあるスキーマを表現する場合や(publicスキーマなど)、スキーマの概念を持たないDBMSの場合は、空指定(定義なし)が許されます。

user (*)

接続ユーザ。

password

接続ユーザの対応する接続パスワード。

replaceSchemaDefinitionMap.dfprop の additionalUserMap の password と同様の外だしのパスワードファイルを利用することもできます(@since 0.9.9.8)。 この外だしファイルの機能は、url や user でも利用できます。

propertiesMap

JDBCドライバの接続プロパティ。

値候補
map型の任意の key-value
デフォルト
なし (設定するものなし)
e.g. Oracleでシノニムを扱う場合 @databaseInfoMap.dfprop
; propertiesMap = map:{includeSynonyms=true}

variousMap

その他様々なプロパティ。

objectTypeTargetList

自動生成対象のオブジェクトのリスト。(variousMapの中のプロパティ)

そもそもDBFluteでは、ビューやシノニムなども、テーブルと同じように扱うことができます。

値候補
TABLE, VIEW, SYNONYM, ALIASなどのリスト型プロパティ
デフォルト
TABLE, VIEW
補足
  • TABLEやVIEWなどの基本項目以外はDBMSによっては変わってくるので注意。例えば、Oracleのシノニムを扱いたい場合は "SYNONYM" を追加すること(同時に propertiesMap の設定も忘れずに)。
  • Oracleのマテリアライズドビューは "VIEW" に含まれる
  • PostgreSQLのマテリアライズドビューは "MATERIALIZED VIEW" と指定
e.g. Oracleのシノニムも自動生成したい場合 @databaseInfoMap.dfprop
; variousMap = map:{
    ; objectTypeTargetList = list:{TABLE ; VIEW ; SYNONYM}
}

このプロパティは、メインスキーマのみに対する設定となります。 追加スキーマに関しては追加スキーマの設定の中で独自に指定します。

ReplaceSchemaのスキーマ初期化やSql2Entityのプロシージャシノニムの自動生成にも影響するプロパティです。 ただ、ReplaceSchemaでは、replaceSchemaDefinitionMap.dfprop にて設定を上書きすることができます(@since 0.9.8.2)

tableExceptList

自動生成対象から除外するテーブルのリスト。(variousMapの中のプロパティ)

値候補
テーブル名のlist型プロパティ
デフォルト
なし (除外するものなし)
補足
  • tableTargetList の指定がされている場合は無効 (target優先)
  • 前方一致: "prefix:前方一致させる文字列" という形式で指定
  • 後方一致: "suffix:後方一致させる文字列" という形式で指定
  • 部分一致: "contain:部分一致させる文字列" という形式で指定
  • 正規表現: "pattern:マッチさせる正規表現文字列" という形式で指定 @since 1.1.2
  • 正規表現を除き、大文字小文字の区別なし (ただし実体と合わせることを推奨)
  • 複数指定時は、and 条件として扱われる (e.g. Aでもない、Bでもない)
  • Generateのみで除外: "[テーブル名]@gen" という形式で指定(詳細後述) @since 0.9.8.2
e.g. "MST_" で始まるテーブルと "_HIST" で終わるテーブルを除外したい場合 @databaseInfoMap.dfprop
; variousMap = map:{
    ; tableExceptList = list:{prefix:MST_ ; suffix:_HIST}
}

このプロパティは、メインスキーマのみに対する設定となります。 また、テーブルだけでなく objectTypeTargetList で指定した他のオブジェクトも含まれます。

ここでいう除外とは、"メタデータを取得しない" という意味になります。 よって、自動生成対象にもならなければ、SchemaHTML や HistoryHTML などのドキュメント生成処理においても対象外となります。 ただし、ReplaceSchema に関しては、このプロパティは無視されるため、スキーマ初期化などでは除外されたテーブルも削除されます。

一方で、SchemaHTML や HistoryHTML はとても利便性の高い機能であり、アプリとして利用しないもののドキュメントでは参照したいという状況も十分想定されるため、 "クラスの自動生成においてのみ除外する" という指定もできます。除外テーブルの指定において suffix として @gen を付与することで、その指定に該当するテーブルはドキュメント上 (Docタスク) では参照できつつも、クラスの自動生成 (Generateタスク) では除外されるようになります。 @since 0.9.8.2

e.g. "MST_" で始まるテーブルは Generate のみで除外したい場合 @databaseInfoMap.dfprop
; variousMap = map:{
    ; tableExceptList = list:{prefix:MST_@gen}
}

tableTargetList

自動生成対象を指定するテーブルのリスト。(variousMapの中のプロパティ)

値候補
テーブル名のlist型プロパティ
デフォルト
なし (全テーブルが自動生成対象: tableExceptList 次第)
補足
  • 指定方法は、基本的に tableExceptList と同じ
  • ただし、Generateのみ指定はこちらでは利用できない
e.g. "MST_" で始まるテーブルのみ対象にしたい場合 @databaseInfoMap.dfprop
; variousMap = map:{
    ; tableTargetList = list:{prefix:MST_}
}

このプロパティは、メインスキーマのみに対する設定となります。 また、テーブルだけでなく objectTypeTargetList で指定した他のオブジェクトも含まれます。

SchemaHTML や ReplaceSchema などの別の処理への影響は、tableExceptList と同じです。

columnExceptMap

自動生成対象から除外するカラムのリスト。(variousMapの中のプロパティ)

アプリケーションからは検索も更新(insert, update)も何もしないカラムがある場合に役に立ちます。

値候補
テーブル名とカラム名のmap型プロパティ
デフォルト
なし (全てのカラムが自動生成対象)
補足
  • テーブル名の指定は、大文字小文字の区別なしの完全一致
  • カラム名リストの指定方法は、基本的に tableExceptListと同じ
e.g. "GENMAI.OTHER_SYSTEM_USED_NAME" というカラムを除外したい場合 @databaseInfoMap.dfprop
; variousMap = map:{
    ; columnExceptMap = map:{
        ; GENMAI = list:{OTHER_SYSTEM_USED_NAME}
    }
}

このプロパティは、メインスキーマのみに対する設定となります。

additionalSchemaMap

自動生成対象に含める別スキーマの情報を設定。(variousMapの中のプロパティ)

スキーマをサポートしていないDBMSでは無効です。

値候補
スキーマ情報のmap型プロパティ
デフォルト
なし (メインスキーマのみ自動生成対象)
 additionalSchemaMapの仕様 @databaseInfoMap.dfprop
variousMap = map:{
    additionalSchemaMap = map:{
        ; [schema-name] = map:{
            ; objectTypeTargetList = list:{[objectTypeTargetList]}
            ; tableExceptList = list:{[tableExceptList]}
            ; tableTargetList = list:{[tableTargetList]}
            ; columnExceptMap = map:{[columnExceptMap]}
            ; isSuppressCommonColumn = [true or false(default)]
            ; isSuppressProcedure = [true or false(default)]
        }
    }
}

ConditionBean で発行されるSQLにおいて、別スキーマのテーブルは "[スキーマ名].[テーブル名]" という形式で表現されます。よって、ConditionBean ではスキーマ名の修飾を意識する必要はありません。(但し、外だしSQLでは意識する必要あり)

ReplaceSchema のスキーマ初期化には影響しません。初期化されるのはメインスキーマのものだけです。 別スキーマのテーブルを削除する機能はReplaceSchemaで別途用意されています。

Sql2Entity のプロシージャの自動生成には影響します。 アプリで別スキーマのプロシージャを利用する場合は、ここでそのスキーマを設定することで利用できるようになります。

別スキーマのシーケンスを利用する場合は、実はここでの設定とは関係なく、sequenceDefinitionMap.dfprop にて、スキーマ名を修飾したシーケンス名を指定することで利用できます。

schema-name

自動生成対象とするスキーマ名(追加スキーマ)を指定します。

別カタログ(別データベース)のスキーマを指定する場合は、"[カタログ名].[スキーマ名]" という形式で指定します。このようにすると、ConditionBean で発行されるSQLのテーブル名の修飾は、"[カタログ名].[スキーマ名].[テーブル名]" という形式になります。MySQL のようにスキーマの概念のないDBMSで、別カタログを直接利用したい場合は、"[カタログ名].$$NoNameSchema$$" という形式で指定します(DBFluteの内部的には無名のスキーマとして取り扱われます)。この場合は、テーブル名の修飾は、"[カタログ名].[テーブル名]" となります。

objectTypeTargetList

追加スキーマ専用の objectTypeTargetList となります。

tableExceptList

追加スキーマ専用の tableExceptList となります。

tableTargetList

追加スキーマ専用の tableTargetList となります。

columnExceptMap

追加スキーマ専用の columnExceptMap となります。

isSuppressCommonColumn

追加スキーマのテーブルに対する共通カラム(CommonColumn)の設定の反映を抑制するか否か。 例えば、共通カラム(CommonColumn)の仕様がメインスキーマのものと違う 場合は true にします。

isSuppressProcedure

追加スキーマのプロシージャクラス(ProcedurePmb)のの自動生成を抑制するか否か。 (メインスキーマのプロシージャが有効になっている状態で)追加スキーマのプロシージャをアプリから全く利用しないのであれば true にします。但し、このプロパティを利用しなくても、プロシージャクラスの自動生成対象のスキーマの取捨選択は、outsideSqlDefinitionMap.dfprop にて調整することも可能です。

e.g. "NEXTEXAMPLEDB" というスキーマを利用したい場合 @databaseInfoMap.dfprop
variousMap = map:{
    additionalSchemaMap = map:{
        ; NEXTEXAMPLEDB = map:{
            ; objectTypeTargetList=list:{TABLE ; VIEW ; SYNONYM}
            # You can comment out these properties if defaults fit your project.
            #; tableExceptList=list:{}
            #; tableTargetList=list:{}
            #; columnExceptMap=map:{}
            #; isSuppressCommonColumn=false
            #; isSuppressProcedure=false
        }
    }
}