新機能「DBコメント」の利用

を試してみる。
DBFlute: DBコメントをJavaDocコメントへ - jfluteの日記
DBFlute: DBコメントでの別名定義 - jfluteの日記


documentDefinitionMap.dfprop

# /---------------------------------------------------------------------------
# [Document Definition]
#   documentDefinitionMap: (NotRequired - Default 'map:{}')
#
#     ex) map:{
#             ; aliasDelimiterInDbComment = :
#             ; entityJavaDocDbCommentValid = true
#         }
#
map:{
#区切り文字を指定 別名(というか生成向けコメント):コメント(DBコメント)のように区切る。
    ; aliasDelimiterInDbComment =:
#DBコメントをJavaDocコメントに反映。 通常は別名(というか生成向けコメント)のみ利用。以下設定により、DBコメントも反映させる。
     ; entityJavaDocDbCommentValid = true
}
# ----------------/

を用意して実施。


replace-schema.sql

CREATE TABLE EMP(ID IDENTITY NOT NULL PRIMARY KEY, EMP_NO INTEGER NOT NULL ,EMP_NAME VARCHAR(20),MGR_ID INTEGER,HIREDATE DATE,SAL NUMERIC(7,2),DEPT_ID INTEGER, VERSION_NO INTEGER);
CREATE TABLE DEPT(ID IDENTITY NOT NULL PRIMARY KEY, DEPT_NO INTEGER NOT NULL,DEPT_NAME VARCHAR(20),LOC VARCHAR(20), VERSION_NO INTEGER);

COMMENT ON TABLE EMP IS '社員:社員テーブル';
COMMENT ON TABLE DEPT IS '部署:部署テーブル';

COMMENT ON COLUMN EMP.ID IS '主キー:自動採番される主キー';
COMMENT ON COLUMN EMP.EMP_NO IS '社員ID:論理的キー項目';
COMMENT ON COLUMN EMP.EMP_NAME IS '社員名';
COMMENT ON COLUMN EMP.MGR_ID IS 'マネージャーID:マネージャーの社員ID';
COMMENT ON COLUMN EMP.HIREDATE IS '雇用日:';
COMMENT ON COLUMN EMP.SAL IS '給料:ドル';
COMMENT ON COLUMN EMP.DEPT_ID IS '部署ID:制約はないが理論的外部キー「DEPT」';
COMMENT ON COLUMN EMP.VERSION_NO IS 'バージョン:排他制御管理用';

COMMENT ON COLUMN DEPT.ID IS '主キー:自動採番される主キー';
COMMENT ON COLUMN DEPT.DEPT_NO IS '部署コード:論理的キー';
COMMENT ON COLUMN DEPT.DEPT_NAME IS '部署名';
COMMENT ON COLUMN DEPT.LOC IS '所在地';
COMMENT ON COLUMN DEPT.VERSION_NO IS 'バージョン:排他制御管理用';

INSERT INTO EMP VALUES(1,7369,'SMITH',13,'1980-12-17',800,2,1);
INSERT INTO EMP VALUES(2,7499,'ALLEN',6,'1981-02-20',1600,3,1);
INSERT INTO EMP VALUES(3,7521,'WARD',6,'1981-02-22',1250,3,1);
INSERT INTO EMP VALUES(4,7566,'JONES',9,'1981-04-02',2975,2,1);
INSERT INTO EMP VALUES(5,7654,'MARTIN',6,'1981-09-28',1250,3,1);
INSERT INTO EMP VALUES(6,7698,'BLAKE',9,'1981-05-01',2850,3,1);
INSERT INTO EMP VALUES(7,7782,'CLARK',9,'1981-06-09',2450,1,1);
INSERT INTO EMP VALUES(8,7788,'SCOTT',4,'1982-12-09',3000.0,2,1);
INSERT INTO EMP VALUES(9,7839,'KING',NULL,'1981-11-17',5000,1,1);
INSERT INTO EMP VALUES(10,7844,'TURNER',6,'1981-09-08',1500,3,1);
INSERT INTO EMP VALUES(11,7876,'ADAMS',8,'1983-01-12',1100,2,1);
INSERT INTO EMP VALUES(12,7900,'JAMES',6,'1981-12-03',950,3,1);
INSERT INTO EMP VALUES(13,7902,'FORD',4,'1981-12-03',3000,2,1);
INSERT INTO EMP VALUES(14,7934,'MILLER',7,'1982-01-23',1300,1,1);
INSERT INTO DEPT VALUES(1,10,'ACCOUNTING','NEW YORK',1);
INSERT INTO DEPT VALUES(2,20,'RESEARCH','DALLAS',1);
INSERT INTO DEPT VALUES(3,30,'SALES','CHICAGO',1);
INSERT INTO DEPT VALUES(4,40,'OPERATIONS','BOSTON',1);


コメントはあえて、いろいろなパターンで試してみた。

//これはやっぱり認識されなかった
//COMMENT ON COLUMN EMP.EMP_NAME IS '社員名';
//そりゃただのコメントだもの
    /**
     * EMP_NAME: {VARCHAR(20)} <br />
     * 社員名
     * @return The value of the column 'EMP_NAME'. (Nullable)
     */
    public String getEmpName() {
        return _empName;
    }

    /**
     * (部署ID)DEPT_ID: {INTEGER} <br />
     * 制約はないが理論的外部キー「DEPT」
     * @param deptId The value of the column 'DEPT_ID'. (Nullable)
     */
    public void setDeptId(java.lang.Integer deptId) {
        _modifiedProperties.addPropertyName("deptId");
        this._deptId = deptId;
    }

こんな感じのコメントが生成される。
コメントとしては

  1. '別名:DBコメント'
  2. '別名:'
  3. '別名(のつもり)'

を試してみたが、
上二つは認識。最後のは(考えてみれば当然だが)別名認識はしなかった。
いまさらだけど、':DBコメント'のパターンは試してないや。


んで、setterのコメントとしてはどうかと思ったので、
\templates\om\java\bsentity\BaseEntity.vm
を調整。
〜を返す。
〜を設定する。
というように修正(このカスタマイズが簡単に出来るのがすばらしい)


生成されたSchemaHTML


いやーすばらしいですね。
まぁDBコメントなんて文法すら知らなかった人がいうのもなんですが、
DB管理者がちゃんとコメントをつけて定義してくれるというなら願ったりかなったりですね。


DBFluteはERDの利用を推奨しているようですが、この辺が簡単に出来るといいですね。
(AmaterasERDくらいしか使ったことないけど)
この辺はむしろExcelとかでDB定義を管理しているほうがCOMMENT文作りやすいかも?


ちなみにAmaterasERDはExcelでの出力に対応したとか。

ちなみに

興味のあった、ReplaceSchemaでの埋め込み変数だけど
いい例が見当たらなかったので試してない。