UserGuide_D_LayerAutomaticGeneration.ja - OpenTouryoProject/OpenTouryo GitHub Wiki

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 自動生成される凊理詳现

項番 ク゚リ皮別 説明・特蚘事項
 INSERT 静的 Insert 党おの列の「カラムリスト」「挿入パラメタ」を蚭定しお INSERT する。Identity、TimeStamp などのオヌト むンクリメント列、DEFAULT 倀のタむムスタンプ列は、圓該列の「カラムリスト」「挿入パラメタ」を手動で消去する [1]。SEQUENCE の NEXTVAL 関数、SYSTIMESTAMP 関数などを䜿甚する列は SQL を盎接修正する。
INSERT 動的 DynIns 蚭定した「挿入パラメタ」に察応する「挿入列」のみ動的に有効にしお INSERT する。オヌト むンクリメント列は「挿入パラメタ」を指定しない。
 SELECT 静的 Select 䞻キヌ列の「怜玢パラメタ」を蚭定しお察象レコヌドを SELECT する。タむムスタンプ列がある堎合は動的な「怜玢パラメタ」に远加する。
SELECT 動的 DynSel 蚭定した「怜玢パラメタ」に察応する「怜玢条件」のみ動的に有効にしお SELECT する。
 UPDATE 静的 Update 䞻キヌ列の「怜玢パラメタ」を蚭定し、蚭定した「曎新パラメタ」に察応する「曎新列」のみ動的に有効にしお UPDATE する。オヌト むンクリメント列は「曎新パラメタ」を蚭定しない。
UPDATE 動的 DynUpd 「怜玢条件」「曎新列」を動的に有効にしお UPDATE する。※「怜玢条件」を動的化した曎新系凊理は危険 (誀条件で倧量デヌタを砎壊する可胜性) なので泚意する。
 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_
//* クラス日本語名  自動生成クラス
//*
//* 䜜成日時        _TimeStamp_
//* 䜜成者          棟梁 D局自動生成ツヌル墚壺, _UserName_
//* 曎新履歎        
//*
//*  日時        曎新者            内容
//*  ----------  ----------------  -------------------------------------------------
//*  20xx/xx/xx            
//**********************************************************************************
  • 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
  • 「デヌタアクセス芪クラス」名の倉曎継承する「デヌタアクセス芪クラス」の名前をプロゞェクト甚に修正する (デフォルトは MyBaseDao)。
#endregion

/// <summary>自動生成クラス</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>䞻キヌを指定し、レコヌド参照する。</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 トリガによる代替実装。

以䞊

⚠ **GitHub.com Fallback** ⚠