モデルの定義はYAMLで記述します。1つのアプリケーションで複数のモデルファイルを使うこともできます。異なるデータベースを扱う場合は、データベース別にモデルファイルを作成してください。
TapKitをインストールすると、ライブラリと同時にmodelerコマンドがインストールされます。modelerはデータベーススキーマからモデルファイルを生成する対話型のツールです。アダプタ情報やエンティティなどをマッピングし、リレーションシップも生成します。
usage: modeler [-h|--help] adapter filename % ./modeler MySQL employee.yaml
| 引数 | 説明 |
|---|---|
-h, --help |
ヘルプを表示する。 |
adapter |
アダプタ名。 |
filename |
生成するモデルのファイル名。 |
modelerを実行すると、データベースの接続情報を入力するプロンプトが表示されます。
% modeler MySQL model.yaml Login database with DBI URL: [dbi:Mysql:examples] Username: [mysql] Password: [mysql]
ログインできれば、選択可能なテーブルが表示されます。
Selectable tables - COMPANY, EMPLOYEE, EMPLOYEE_PROJECT, PROJECT, ... (If you want to select the all tables, input 'all')
続けてマッピングしたいテーブルをカンマで区切って選択します。すべてのテーブルを選択するときはallを入力してください。
Select tables (separate table names with comma): [COMPANY, EMPLOYEE] Create model.yaml
データベースドライバの設定です。すべて必須項目です。
| 設定項目 | 説明 |
|---|---|
adapter_name |
データベースとの接続に使用するアダプタ名。MySQL, PostgreSQL, OpenBase, CSVのいずれかを指定する。 |
connection |
データベースと接続するときに使う情報。 |
entities |
マッピングするエンティティのリスト。詳細は「エンティティ」を参照のこと。 |
connectionにはデータベースの接続に関する設定を記述します。何を設定するのかは各アダプタによって異なります。詳細は「アダプタ」を参照してください。
| 設定項目 | 説明 |
|---|---|
url |
接続するデータベースのアドレス。DBIを使うアダプタ(MySQLアダプタとPostgreSQLアダプタ)で使う。 |
user |
ユーザー名。 |
password |
パスワード。 |
encoding |
文字コードのエンコーディング。これを設定すると、データのフェッチや更新時に自動的に文字コードの変換を行う。jis, sjis, eucから選択する。「文字コードのエンコーディング」を参照。 |
デフォルトでは以下のデータ型がサポートされています。データベース固有のデータ型は各アダプタでサポートされますが、中には各アダプタで異なるオブジェクトにマッピングされるデータ型もあります。
| マッピング | データ型 |
|---|---|
String |
char, character, varchar, char varying, character varying, nchar, national char, national character, national character varying, bit, bit varying |
Integer |
int, integer, smallint, interval |
Float |
numeric, decimal, dec, float, real, double presicion |
TapKit::Date |
date |
TapKit::Time |
time |
TapKit::Timestamp |
timestamp |
エンティティ(テーブル)に関する設定です。relationship以外は必須項目です。
| 設定項目 | 説明 |
|---|---|
name |
エンティティ名。TapKitからはこの名前でアクセスする。 |
external_name |
データベースに登録されているテーブル名。 |
attributes |
属性のリスト。詳細は「属性」を参照。 |
primary_key_attributes |
主キーの属性のリスト。複数設定できるが、TapKitでは複合主キー値の自動生成はサポートしない。 |
class_properties |
クラス属性のリスト。このリストに設定していない属性のデータにはアクセスできない。 |
relationship |
リレーションシップのリスト。詳細は「リレーションシップ」を参照。 |
属性(フィールド)に関する設定です。name, column_name, external_type, class_nameは必須項目です。
| 設定項目 | 設定 |
|---|---|
name |
属性名。TapKitからはこの名前でアクセスする。 |
column_name |
データベースに登録されているフィールド名。 |
class_name |
データをマッピングするクラス名。String, Integer, Float, Date, Time, Timestamp, Booleanから選択する。 |
external_type |
データベースで管理されているフィールドのデータ型。サポートされるデータ型は各アダプタに依存する。 |
allow_null |
NULLの制約。falseにするとNULLの入力を許可しない。省略するとfalseに設定される。 |
read_only |
読み込み専用の設定。trueにするとデータを変更できなくなる。 |
width |
データの長さ。データ型が文字列のときのみ有効。 |
属性のclass_nameをBooleanにマッピングすると、データ行の1をtrueに、0をfalseに相互変換します。数値以外のデータ型にBooleanをマッピングすることはできません。
属性を上記以外のクラスにマッピングすることもできます。フェッチしたデータ行はカスタムクラスに自動的に変換され、保存時にはその逆の操作が行われます。カスタムデータ型を使用するには以下の項目を設定します。
class_nameにカスタムクラス名を指定する
factory_methodに、文字列からカスタムクラスのインスタンスを生成するクラスメソッドを指定する
conversion_methodに、SQL文に埋め込むデータに変換するインスタンスメソッドを指定するこのほかにカスタムクラスには、Qualifierの条件式で比較を行うためのメソッド(==や!=など)が必要です。
リレーションシップに関する設定です。name, destination, joinsは必須項目です。
| 設定項目 | 説明 |
|---|---|
name |
リレーションシップ名。TapKitからはこの名前でアクセスする。 |
destination |
リレーション先のエンティティ。 |
joins |
エンティティの結合のリスト。 |
join_semantic |
結合する方法。inner(内部結合)、left_outer(左外部結合)、right_outer(右外部結合)、full_outer(完全外部結合)から選択する。省略するとinnerに設定される。 |
to_many |
リレーションシップが1対多のときtrueに設定する。省略すると1対1として扱われる。 |
mandatory |
リレーションシップが必須かどうかを設定する。trueにするとリレーションシップをNULLに設定できなくなる。 |
delete_rule |
オブジェクトを削除したときのリレーションシップの扱いを設定する。 |
参照元と参照先の属性を指定し、リレーションシップの結合の設定を行います。
| 設定項目 | 説明 |
|---|---|
source |
リレーション元の属性。 |
destination |
リレーション先の属性。 |
リレーション元のオブジェクトを削除するとき、リレーション先のオブジェクトをどうするか設定します。
| 規則 | 説明 |
|---|---|
nullify |
削除するオブジェクトに対するリレーションシップをすべてnull(nil)にする。 |
cascade |
関連するオブジェクトをすべて削除する。 |
deny |
リレーション先にオブジェクトが存在するとき、オブジェクトを削除できないようにする。リレーション先のオブジェクトをすべて削除しておかないと、オブジェクトを削除できない。 |