こんにちは、開発本部の江本です。
私は現在、e Builder Application Producer の開発をやってます。
e Builder の便利な機能やTips、今後の機能強化などについてブログで公開し、皆様の声を基に、皆様と一緒にe Builder を開発していければと思っております。
さて、今日は、e Builder Application Producer の「DB設計機能」を紹介します。
※Application Producer、名前が長いので、「AppPro」と略します!
AppProの「DB設計機能」の魅力
AppProには、DB設計機能として、「DBデザイナ」というツールがあります。基本的なDB設計機能としては、下部「機能一覧」に記載した通り、他社様のツールと比較しても大差はございません。
それは、AppProでDB設計を行なうと、DAOの開発が非常に「楽」になります。たとえば、DB設計を行なうだけで、im-JavaEEフレームワークの基本DAOを自動生成してくれます。
※S2JDBCのS2JDBC-Genと似た機能です。
基本DAOとは、以下のような「各テーブルのCRUD操作が可能なDAO」です。
- 全件取得DAO ※4役(select/fetch/exists/count)あり。OrderBy句は引数で指定
- 主キー条件による1件取得DAO
- 登録DAO
- 主キー条件による1件更新DAO
- 全件削除DAO
- 主キー条件による1件削除DAO
※DAOとは、データにアクセスするためのオブジェクト。
※基本DAO以外の「DAOの作成方法」については、次回紹介します!
ただし、AppProにおける「DB設計」では、すべてのデータ項目を「データディクショナリ」に定義する必要があります。
※正しい表現すると、AppProでは、「アプリケーション開発をする上で、取扱うデータはすべてデータディクショナリで管理しよう♪」という思想があります。
データディクショナリとは、日本語で表現するとわかりやすく、「データ項目の辞書」です。
データ項目の論理名、物理名、カラム名、データ型などを定義します。
データディクショナリでデータ項目を管理することで、たとえば、カラムサイズの変更を行なう場合、データディクショナリを変更すればそのカラムを利用しているエンティティ(テーブル)に一括反映させることができます。
たとえば、同じカラム名なのに、カラムデータ型が異なる等。
この場合、AppProプロジェクトを分けることで回避することができます。
1つのAppProプロジェクトは、1つのデータディクショナリを管理します。
AppProプロジェクトが異なれば、別のデータディクショナリで管理されるので、カラム名が同じでも別のデータ項目として扱えます。
このように、「データディクショナリ+DBデザイナ」でDB設計を行なうことで、基本DAOが自動生成され、DAO開発が非常に「楽」になります。もちろん、DB設計を変更した場合、即座に基本DAOに反映されます。
AppProでは、この生成されたDAOをCTR/BIZから利用します。
つまり、CTR/BIZからDAOをマッピングするだけ(ノンコーディング)で、DBに対して登録/参照/更新/削除(CRUD)ができます。
実際にアプリケーションを開発する場合、基本DAOだけでは作ることができません。。
次回は「DAO開発」を紹介します!
[参考] DB設計機能の機能一覧
- データディクショナリ機能
- ドメイン編集
- ドメイン定義書出力
- DB設計
- エンティティ作成
- ビュー作成
- リレーションシップ作成
- 論理/物理モデル切替
- 既存DBからインポート
- DDLファイル出力
- 設計書出力
- エンティティ一覧
- エンティティ定義書
- 論理ER図
- 物理ER図
- JavaEE
- エンティティのJavaBean生成
- エンティティの基本DAO生成 ※im-JavaEE Framework のDAOを自動生成
- SQL定義一覧
- SQL定義書
[参考] DB設計イメージ ~論理ビュー~
[参考] DB設計イメージ ~物理ビュー~
[参考] DB設計イメージ ~データディクショナリからドラッグ&ドロップ~
[参考] 生成されたDDL文
[code:sql]
CREATE TABLE eb_s_sales_slip
(
sales_slip_cd VARCHAR(50) NOT NULL,
sales_date VARCHAR(10),
customer_cd VARCHAR(50) NOT NULL,
product_cd VARCHAR(50) NOT NULL,
product_sales_amount VARCHAR(50),
insert_user_cd VARCHAR(50),
record_user_cd VARCHAR(50),
insert_date VARCHAR(19),
record_date VARCHAR(19),
PRIMARY KEY (sales_slip_cd)
)
;
CREATE TABLE eb_s_customer
(
customer_cd VARCHAR(50) NOT NULL,
customer_name VARCHAR(100),
insert_user_cd VARCHAR(50),
record_user_cd VARCHAR(50),
insert_date VARCHAR(19),
record_date VARCHAR(19),
PRIMARY KEY (customer_cd)
)
;
CREATE TABLE eb_s_product_unit_price
(
customer_cd VARCHAR(50) NOT NULL,
product_cd VARCHAR(50) NOT NULL,
product_unit_price DECIMAL(19,4),
insert_user_cd VARCHAR(50),
record_user_cd VARCHAR(50),
insert_date VARCHAR(19),
record_date VARCHAR(19),
product_name VARCHAR(100),
customer_name VARCHAR(100),
PRIMARY KEY (customer_cd, product_cd)
)
;
CREATE TABLE eb_s_product
(
product_cd VARCHAR(50) NOT NULL,
product_name VARCHAR(100),
insert_user_cd VARCHAR(50),
record_user_cd VARCHAR(50),
insert_date VARCHAR(19),
record_date VARCHAR(19),
PRIMARY KEY (product_cd)
)
;
[/code]
※生成時に様々なオプションを指定できます。
[参考] 生成されたJavaBean ~ 商品マスタ(EB_S_PRODUCT)~
[code:java]
package jp.co.intra_mart.product.eb.sample.simplesales.dm;
import java.io.Serializable;
import java.util.Date;
/**
* 商品マスタ
*/
public class EbSProduct implements Serializable{
/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;
/**
* 商品コード
*/
private String productCd;
/**
* 商品名
*/
private String productName;
/**
* 登録ユーザID
* データを追加したユーザ
*/
private String insertUserId;
/**
* 更新ユーザID
* データを更新したユーザ
*/
private String recordUserId;
/**
* 登録日
* 登録した日です
*/
private Date insertDate = new Date();
/**
* 更新日
* 更新した日です
*/
private Date recordDate = new Date();
/**
* 商品コードを設定します。
* @param productCd 商品コード
*/
public void setProductCd(String productCd) {
this.productCd = productCd;
}
/**
* 商品コードを取得します。
* @return 商品コード
*/
public String getProductCd() {
return this.productCd;
}
/**
* 商品名を設定します。
* @param productName 商品名
*/
public void setProductName(String productName) {
this.productName = productName;
}
/**
* 商品名を取得します。
* @return 商品名
*/
public String getProductName() {
return this.productName;
}
/**
* 登録ユーザIDを設定します。
* @param insertUserId 登録ユーザID
*/
public void setInsertUserId(String insertUserId) {
this.insertUserId = insertUserId;
}
/**
* 登録ユーザIDを取得します。
* @return 登録ユーザID
*/
public String getInsertUserId() {
return this.insertUserId;
}
/**
* 更新ユーザIDを設定します。
* @param recordUserId 更新ユーザID
*/
public void setRecordUserId(String recordUserId) {
this.recordUserId = recordUserId;
}
/**
* 更新ユーザIDを取得します。
* @return 更新ユーザID
*/
public String getRecordUserId() {
return this.recordUserId;
}
/**
* 登録日を設定します。
* @param insertDate 登録日
*/
public void setInsertDate(Date insertDate) {
this.insertDate = insertDate;
}
/**
* 登録日を取得します。
* @return 登録日
*/
public Date getInsertDate() {
return this.insertDate;
}
/**
* 更新日を設定します。
* @param recordDate 更新日
*/
public void setRecordDate(Date recordDate) {
this.recordDate = recordDate;
}
/**
* 更新日を取得します。
* @return 更新日
*/
public Date getRecordDate() {
return this.recordDate;
}
/**
*
*
* @generated
*/
@Override
public String toString() {
StringBuilder result = new StringBuilder(super.toString());
result.append("(productCd: ");
result.append(productCd);
result.append(", productName: ");
result.append(productName);
result.append(", insertUserId: ");
result.append(insertUserId);
result.append(", recordUserId: ");
result.append(recordUserId);
result.append(", insertDate: ");
result.append(insertDate);
result.append(", recordDate: ");
result.append(recordDate);
result.append(")");
return result.toString();
}
}
[/code]
[参考] 生成された設計書
AppProプロジェクト「シンプル売上管理」から生成されたすべての設計書。
[参考] AppProプロジェクト「シンプル売上管理」のダウンロード
上記コードや設計書を生成したAppProプロジェクト「シンプル売上管理」です。
ダウンロード後、以下の手順でe Builder(eclipse)のワークスペースにインポートしてご利用ください。
- ウィンドウメニュー[ファイル]-[インポート]をクリック
- 表示されたウィザードのメニュー[一般]-[既存プロジェクトをワークスペースへ]を選択し、[次へ]ボタンをクリック
- ラジオボタン[アーカイブ・ファイルの選択]をクリックし、[参照]ボタンをクリックし、ダウンロードしたZIPファイルを選択
- [完了]ボタンをクリック。※プロジェクトのインポートが開始されます。
必ず上記方法でワークスペースにインポートしてください。