開発Blog

e Builder Application ProducerでDB設計♪

投稿日:2010-08-27 更新日:

こんにちは、開発本部の江本です。

私は現在、e Builder Application Producer の開発をやってます。
e Builder の便利な機能やTips、今後の機能強化などについてブログで公開し、皆様の声を基に、皆様と一緒にe Builder を開発していければと思っております。

さて、今日は、e Builder Application Producer の「DB設計機能」を紹介します。

※Application Producer、名前が長いので、「AppPro」と略します!

AppProの「DB設計機能」の魅力

AppProには、DB設計機能として、「DBデザイナ」というツールがあります。基本的なDB設計機能としては、下部「機能一覧」に記載した通り、他社様のツールと比較しても大差はございません。

※足りない機能がございましたら、ぜひご連絡ください!?

dm_logical.png

では、何が魅力なのか?

それは、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では、「アプリケーション開発をする上で、取扱うデータはすべてデータディクショナリで管理しよう♪」という思想があります。

データディクショナリとは、日本語で表現するとわかりやすく、「データ項目の辞書」です。
データ項目の論理名、物理名、カラム名、データ型などを定義します。

ddf_edit.png

データディクショナリでデータ項目を管理することで、たとえば、カラムサイズの変更を行なう場合、データディクショナリを変更すればそのカラムを利用しているエンティティ(テーブル)に一括反映させることができます。

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設計イメージ ~論理ビュー~

dm_logical.png

[参考] DB設計イメージ ~物理ビュー~

dm_phygical.png

[参考] DB設計イメージ ~データディクショナリからドラッグ&ドロップ~

ddf_to_dm_drag_and_drop.png

[参考] 生成された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]

※生成時に様々なオプションを指定できます。

ddl_output_options.png

[参考] 生成された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プロジェクト「シンプル売上管理」から生成されたすべての設計書。

design_documents.zip

[参考] AppProプロジェクト「シンプル売上管理」のダウンロード

上記コードや設計書を生成したAppProプロジェクト「シンプル売上管理」です。

simplesales_apppro.zip

ダウンロード後、以下の手順でe Builder(eclipse)のワークスペースにインポートしてご利用ください。

  1. ウィンドウメニュー[ファイル]-[インポート]をクリック
  2. 表示されたウィザードのメニュー[一般]-[既存プロジェクトをワークスペースへ]を選択し、[次へ]ボタンをクリック
  3. ラジオボタン[アーカイブ・ファイルの選択]をクリックし、[参照]ボタンをクリックし、ダウンロードしたZIPファイルを選択
  4. [完了]ボタンをクリック。※プロジェクトのインポートが開始されます。

ZIPファイルを解凍ツールで解凍すると、文字化けたファイルやフォルダが生成されます。。
必ず上記方法でワークスペースにインポートしてください。

-開発Blog
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

intra-martのLDAP接続機能について

※下記内容は、過去のintra-mart(Ver4.3以前)に関する内容です。最新のintra-martでは、異なる情報であることがありますので、ご注意ください。 intra-martはver2.1よ …

no image

intra-mart Advent Calendar 2013 第3日:ViewCreatorで計算式が使えるようになってますよ!

この記事は、intra-mart Advent Calendar 2013 第3日の記事です。 きょうから、3日間ほど、Accel PlatformのViewCreatorで新規追加された機能を紹介し …

no image

iPhone/iPad用アプリケーション im-scheduler リリース!!

先日、10月22日に弊社イベント Enterprise Web Solution 2010に多数の方がご参加頂き、 ありがとうございました。 実は、そのイベントの裏で、ひっそりと、 iPhone/iP …

no image

ServerManagerについて

こんにちは、開発本部の大西です。 今日は、分かっているようで、なにをしているかいまいち、解りにくい、ServerManagerについて、お話します。 ServerManagerの動作上の仕様は、 ・シ …

no image

Forma関数で条件式を書く

IM-FormaDesignerの画面アイテム「関数」を利用して式を記述できますが、まもなくリリース予定のパッチ2よりAND演算・OR演算の論理演算関数や比較演算子を使えるようになります。 これにより …