Skip to content

UserGuide_D_LayerAutomaticGeneration.ja

nishi_74322014 edited this page Aug 11, 2026 · 5 revisions

Open 棟梁 利用ガイド (D層自動生成編)

2016年10月3日

はじめに

本ドキュメントの対象

  • Open 棟梁を用いたアプリケーション開発を行う、SE・開発者

本ドキュメントの概要

本ドキュメントは、フレームワークの持つ D層自動生成機能の利用方法について纏めています。

他社所有名称に対する表示

本ドキュメントに記載の会社名・商品名は、各社の商標または登録商標です。

ライセンス

本ドキュメントは、クリエイティブ・コモンズ CC BY 2.1 JP ライセンスの下で利用可能です。

※ 本ページの図はツールのスクリーンショットです。一部の図 (図4.1-1〜図4.1-5 など) は抽出できずキャプションのみです。

目次

1. D層自動生成ツール(墨壺)の概要

2. 定義情報の自動生成

3. Dao・SQL ファイルの自動生成

4. テンプレート説明

5. 処理のカスタマイズ例

1. D層自動生成ツール(墨壺)の概要

"Open 棟梁" の D層自動生成ツール (墨壺) は、下記の方式に従い、「DB のスキーマ情報の抽出機能」から、テーブル、カラム、主キー情報 (取得可能な場合) を取得して中間ファイルを作成、これを「D層自動生成機能」に渡し、Dao・SQL ファイルを自動生成します。

図 1-1 D層自動生成ツール 生成の方式

作成した Dao・SQL ファイルは、テーブル・ビューに対する、静的な処理 (レコード単位の CRUD 処理) と動的な処理 (データ セット単位のデータ アクセス処理) を実行可能です。

図 1-2 D層自動生成ツール 生成される処理

1.1 自動生成される処理詳細

D層自動生成ツールを使用すれば、共通部品イメージで使用できるデータ アクセス ライブラリを自動生成できます。特に、更新系の処理は本ツールで自動生成した Dao・SQL ファイルで、ほぼ 100% 自動生成できます。

表 1.1 自動生成される処理詳細

項番 クエリ種別 説明・特記事項
1 INSERT 静的 Insert 全ての列の「カラムリスト」「挿入パラメタ」を設定して INSERT する。Identity、TimeStamp などのオート インクリメント列、DEFAULT 値のタイムスタンプ列は、当該列の「カラムリスト」「挿入パラメタ」を手動で消去する [1]。SEQUENCE の NEXTVAL 関数、SYSTIMESTAMP 関数などを使用する列は SQL を直接修正する。
INSERT 動的 DynIns 設定した「挿入パラメタ」に対応する「挿入列」のみ動的に有効にして INSERT する。オート インクリメント列は「挿入パラメタ」を指定しない。
2 SELECT 静的 Select 主キー列の「検索パラメタ」を設定して対象レコードを SELECT する。タイムスタンプ列がある場合は動的な「検索パラメタ」に追加する。
SELECT 動的 DynSel 設定した「検索パラメタ」に対応する「検索条件」のみ動的に有効にして SELECT する。
3 UPDATE 静的 Update 主キー列の「検索パラメタ」を設定し、設定した「更新パラメタ」に対応する「更新列」のみ動的に有効にして UPDATE する。オート インクリメント列は「更新パラメタ」を設定しない。
UPDATE 動的 DynUpd 「検索条件」「更新列」を動的に有効にして UPDATE する。※「検索条件」を動的化した更新系処理は危険 (誤条件で大量データを破壊する可能性) なので注意する。
4 DELETE 静的 Delete 主キー列の「検索パラメタ」を設定して対象レコードを DELETE する。
DELETE 動的 DynDel 設定した「検索パラメタ」に対応する「検索条件」のみ動的に有効にして DELETE する。※ 動的化した更新系処理は危険なので注意する。

★★ UP から更新時のタイムスタンプを指定する方法は推奨されないので、必ず DBMS によるオートインクリメント方式か、ツール GUI にタイムスタンプ列名と更新方法を設定し静的にその値で更新する方式を採用すること。

※ サポートしない処理:Join を使用するクエリ、特殊な検索条件 [2] を使用するクエリ、更新系処理の中で Select を使用した Insert・Update クエリなど。 ※ ユーザ パラメタ定義は自動生成の対象外なので、必要であれば出力した SQL ファイルに直接定義する。

1.2 自動生成される Dao・SQL ファイル構成

生成される Dao・SQL ファイルは、次のような構成になっています。

図 1.2 生成される Dao・SQL ファイルの構成

このような構成の Dao・SQL ファイル (太線のもの) が、テーブル・ビュー毎に生成されます (1 つのテーブル・ビューにつき、Dao クラス ファイル×1、SQL ファイル×8 が生成される)。

1.3 サポートされない処理の対応

テーブル・ビューに対する静的な処理・動的な処理に該当しない処理はサポートしません。該当している場合も、特殊な検索条件を使用するクエリ、Select を使用した Insert・Update クエリなどはサポートしません。これらの場合は、SQL を直接作成し、Dao クラスを利用してデータ アクセスを実施します。

図 1.3 D層自動生成でサポートされないデータアクセス処理に対応する方法

※ 複雑な SQL の場合でも、参照系であればビューを使用することで、本ツールの自動生成の開発ルートに当て込むことができます。

2. 定義情報の自動生成

本章では、D層定義情報の自動生成方法について説明します。

  1. [D層定義情報ファイル生成] ツールを起動:D層自動生成ツールの EXE (DaoGen_Tool.exe) を起動すると、[D層定義情報ファイル生成] 画面が表示されます。

    図 2-1 [D層、Dao・SQL ファイル生成] 画面を起動

  2. データ プロバイダを選択し、接続文字列を入力しコンボ ボックス値を選択し [スキーマ情報取得] ボタンを押すと、データ プロバイダの GetSchema メソッドで取得できるスキーマ情報を参照できます (接続文字列が正しくない場合は参照できません)。

    図 2-2 データ プロバイダを選択し、接続文字列を入力、スキーマ情報取得をテストする

  3. [DB に接続しテーブルを一覧する] ボタンを押す:手順 3 で正しく接続できていることを確認した後、このボタンを押すと、テーブル・ビュー情報を取得・一覧できます。

    図 2-4 テーブル・ビューを一覧する

  4. 不要なテーブルを削除:リスト ボックス上の削除したいテーブル・ビューを選択した状態で、[選択したテーブルを削除] ボタンを押します。

    図 2-5 不要なテーブル・ビューを削除

  5. 列情報のロード:[列情報のロード] ボタンを押下して、リスト ボックス上のテーブル・ビューの列情報をロードします。

    図 2-6 列情報のロード

  6. 主キー(または、主キー相当)情報の設定:テーブル・ビューを選択した状態で [選択したテーブルの主キーを設定] ボタンを押下、表示されるダイアログで主キー列にチェックを入れます (SQL Server、Oracle では主キー情報は自動的に設定されます)。

    図 2-7-1 主キー情報の設定

    複数テーブルを選択している場合は、ダイアログを閉じた後に次のダイアログが表示されます (続行は [OK]、中止は [キャンセル])。

    図 2-7-2 主キー情報の設定

  7. D層定義情報を生成:[出力エンコーディングを選択する] グループボックスから [Shift-JIS] か [UTF-8] を選択し、[D層定義情報を生成する] ボタンを押下して、D層定義情報ファイルを指定の位置に出力します。

    図 2-8 D層定義情報を生成

  8. D層定義情報の確認 ~ 編集:出力した D層定義情報は CSV 形式なので、Excel などで容易に編集できます。[テーブル名] 列にテーブル・ビュー名、その行の [カラム情報] 列は主キー (相当) のカラム情報、その下の行の [カラム情報] 列は主キー以外のカラム情報です。

    図 2-9 D層定義情報の確認 ~ 編集

3. Dao・SQL ファイルの自動生成

本章では、Dao・SQL ファイルの自動生成方法について説明します。

  1. [D層、Dao・SQL ファイル生成] ツールを起動:DaoGen_Tool.exe を起動し、[D層定義情報ファイル生成] 画面で [Dao・SQL ファイルを生成する] ボタンを押下すると、[D層、Dao・SQL ファイル生成] 画面が表示されます。

    図 3-1 [D層、Dao・SQL ファイル生成] 画面を起動

  2. 一連の生成オプションを設定:データ プロバイダ、言語、入力情報 (テンプレート、エンコーディング)、出力情報 (出力先、エンコーディング、使用者名) などを指定します。

    図 3-2 一連の生成オプションを設定

    • ※ D層定義情報中に [テーブル名, カラム情報~] のヘッダが入っている場合、[ヘッダありの場合(1 行目を無視する)] チェック ボックスを有効にする。
    • ※ タイムスタンプ列名は全テーブルで標準化されている必要がある。オートインクリメント列でない場合は「更新方法」を設定する。Update・Delete の検索条件にタイムスタンプを必須にする場合は [タイムスタンプ必須] をオンにする。
  3. Dao・SQL ファイルを生成:設定完了後、[Dao・SQL ファイルを生成する] ボタンを押下すると、D層生成が完了します。

    図 3-3 Dao・SQL ファイルを生成

  4. Dao・SQL ファイルの確認:指定の出力先に Dao・SQL ファイルが生成されていることを確認します (利用方法はサンプル プログラム [4] を参考にするとわかり易いです)。

4. テンプレート説明

本章では、Dao・SQL ファイルを生成するために必要なテンプレートを説明します。テンプレートは、基本的には ~\root\files\DGenTemplates の位置にあるものをそのまま使用しますが、プロジェクトによってはカスタマイズが必要です。

4.1 Dao のテンプレート

Dao テンプレート (DaoTemplate.cs) のカスタマイズのポイントは以下です。

  • コメント ヘッダ:プロジェクトの方針に合わせて修正する。クラス名 (_DaoClassName_)、作成日時 (_TimeStamp_)、作成者 (_UserName_) には自動生成時に値が埋め込まれる。
//**********************************************************************************
//* クラス名        :_DaoClassName_
//* クラス日本語名  :自動生成Daoクラス
//*
//* 作成日時        :_TimeStamp_
//* 作成者          :棟梁 D層自動生成ツール(墨壺), _UserName_
//* 更新履歴        :
//*
//*  日時        更新者            内容
//*  ----------  ----------------  -------------------------------------------------
//*  20xx/xx/xx  XX XX         XXXX
//**********************************************************************************
  • Using(Import)句:Dao 内で使用するモジュールの Using 句を追加・修正する。特に名前空間の Touryo の部分はプロジェクトの名前空間に修正する。
#region using

// System~
using System;
using System.IO;
using System.Data;
using System.Collections;

// フレームワーク
using Touryo.Infrastructure.Framework.Dao;
using Touryo.Infrastructure.Framework.Common;

// 部品
using Touryo.Infrastructure.Public.Db;
using Touryo.Infrastructure.Public.Util;

// 業務フレームワーク
using Touryo.Infrastructure.Business.Dao;

#endregion
  • 「データアクセス親クラス2」名の変更:継承する「データアクセス親クラス2」の名前をプロジェクト用に修正する (デフォルトは MyBaseDao)。
#endregion

/// <summary>自動生成Daoクラス</summary>
public class _DaoClassName_ : MyBaseDao
{
    #region インスタンス変数
  • 主キー用プロパティ プロシージャのプレフィックス:デフォルトは PK_。(図4.1-4)
    • 主キー用:PK_カラム名、主キー以外:カラム名、更新処理用:ヘッダ_カラム名_フッタ
#region プロパティ プロシージャ(setter、getter)

// ControlComment:RoopStart-PPPK

/// <summary>_ColumnName_列(主キー列)に対するパラメタ ライズド クエリのパラメタを設定する。</summary>
/// <remarks>更新処理時のSET句で使用するパラメタを除く</remarks>
public object PK__ColumnName_
{
    set
    {
        this.HtParameter["_ColumnName_"] = value;
    }
    get
    {
        return this.HtParameter["_ColumnName_"];
    }
}

// ControlComment:RoopEnd-PPPK
  • 参照系処理のメソッド:デフォルトは ExecSelectFill_DT() を使用したインターフェイス。必要であれば ExecSelectFill_DS()、ExecSelect_DR() を使用したインターフェイスを追加する。(図4.1-5)
#region Select

/// <summary>主キーを指定し、1レコード参照する。</summary>
/// <param name="dt">結果を格納するDataTable</param>
public void _SelectMethodName_(DataTable dt)
{
    // ファイルからSQL(Select)を設定する。
    this.SetSqlByFile2("_SelectFileName_");

    // パラメタの設定
    this.SetParametersFromHt();

    // SQL(Select)を実行し、戻り値を戻す。
    this.ExecSelectFill_DT(dt);
}

/// <summary>検索条件を指定し、結果セットを参照する。</summary>
/// <param name="dt">結果を格納するDataTable</param>
public void _DynSelMethodName_(DataTable dt)
{
    // ファイルからSQL(DynSel)を設定する。
    this.SetSqlByFile2("_DynSelFileName_");

    // パラメタの設定
    this.SetParametersFromHt();

    // SQL(DynSel)を実行し、戻り値を戻す。
    this.ExecSelectFill_DT(dt);
}

#endregion

4.2 SQL のテンプレート

SQL テンプレートのカスタマイズのポイントは、基本的にヘッダ部分のみです (~\root\files\DGenTemplates\ 以下の .sql、.xml ファイル)。ファイル名 (_FileName_)、作成日時 (_TimeStamp_)、作成者 (_UserName_) には自動生成時に値が埋め込まれます。

図 4.2-1 SQL のテンプレートのコメント ヘッダ

コメント ヘッダは、SQL トレース出力を念頭において作成すると良いでしょう。

図 4.2-2 SQL トレース ファイルに出力されるコメント ヘッダ情報

5. 処理のカスタマイズ例

本章では、生成された Dao・SQL ファイルのカスタマイズのポイントを示します。

5.1 Insert 処理

デフォルト値を指定した列、Identity (オート インクリメント) 列、SEQUENCE の NEXTVAL 関数などを使用してデータを挿入する列がある場合は、SQL を直接修正します。

図 5.1 Insert 処理の SQL ファイルの例

5.1.1 デフォルト値で Insert する場合

デフォルト値を指定した列、Identity 列に Insert する場合、Insert 時に値を設定しないので、その列を SQL から削除します。

図 5.1.1 デフォルト値で Insert する場合

5.1.2 関数を使用してデータを挿入する場合

SEQUENCE の NEXTVAL 関数などを使用してデータを挿入する列がある場合は、Insert 時に関数を使用して値を設定するように SQL を修正します。

※ Oracle では、BEFORE INSERT トリガ、UPDATE トリガを使用して、Identity (オート インクリメント) 列、TimeStamp 型 (オート インクリメント) 列に相当するものを自作可能です [5]。

図 5.1.2 関数を使用して Insert する場合

脚注

  1. Identity、TimeStamp などのオート インクリメント列、DEFAULT 値を設定したタイムスタンプ列の場合。
  2. Between、Like、複雑な条件式など。
  3. Join、特殊な検索条件、Select を使用した Insert・Update クエリなど。
  4. サンプル プログラムの Dao・SQL ファイルの利用箇所を参考にする。
  5. Oracle の BEFORE INSERT/UPDATE トリガによる代替実装。

-以上-

Clone this wiki locally