DBFlute, H2殴り書き

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
DBFluteのまとめ
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
★概要
リーン・スタートアップ＆インクリメンタル開発
##設計しながら実装する開発 (納期の短い開発)

■以下の機能を自動化
・O/Rマッパー 自動生成ドリブン
　⇒DBのテーブル構造をもとにEntityクラスが自動生成される。

・DB管理支援ツール DB寛容開発自動化

変更に強い！に特化したフレームワーク

★登場人物
各クラスとその役割について記載
【Beheiver クラス (Bhv)】-------------------------------------------------------------------
　DBアクセスを担当するクラス
　DTOに相当する。
　ConditionBean, 外だしSQL等を呼び出す。
　Generateタスクにより1テーブルごとに1クラス自動生成される。
　クラスはEntity名 + Bhv
　DIにより利用可能
　
　〇メソッド一覧
　　http://dbflute.seasar.org/ja/manual/function/ormapper/behavior/index.html#about

【ConditionBean クラス (CB)】-------------------------------------------------------------------
　タイプセーフにSQLを組み立てるクラス
　JPQLに相当？
　Generateタスクにより1テーブルごとに1クラス自動生成される。
　
　〇ConditionBean要素の一覧
　　http://dbflute.seasar.org/ja/manual/function/ormapper/conditionbean/about.html#abbreviation
　〇ひとめでConditionBean
　　http://dbflute.seasar.org/ja/manual/function/ormapper/conditionbean/hitomecb.html


【外だしSQL】
　SQLを外部ファイルに定義すること。
　2Way-SQL（アプリからでもツールからでも動作できる。テストしやすい）
　SQL変更に強い（必要なクラスが自動生成してくれるらしい。）
　・次を自動生成する。(ParameterBean，Entity)
　・Sql2EntityタスクによりParameterBeanEntityクラスを作成する。
　
　参考
　〇外だしSQLの使い方
　・http://dbflute.seasar.org/ja/manual/function/ormapper/outsidesql/howto.html

【ParameterBeanクラス (pmb)】
　・SQLのバインド変数を一つのオブジェクトとしたクラス
　・Sql2Entityタスクにより自動生成される。
　・外だしSQLへのパス情報を内部で保持する。

★セットアップ作業
DBFluteの各タスクを超簡単にまとめる。
　〇Manageタスクの実行
　http://dbflute.seasar.org/ja/manual/function/generator/task/manage/index.html#about

　〇DBFluteタスク
　　http://dbflute.seasar.org/ja/manual/function/generator/task/index.html

　Manage.bat (引数 1)を実行するとどうなるか？
　⇒様々な他タスクが実行される。(Renewalタスク)
　  RelplaceSchema  : スキーマの再作成, テストデータの一括登録（データはcsv等のファイルから読み込まれる。(playsql/data/common/xxxに格納)
　  JDBC            : 実際のDBからスキーマ情報を取得する。
　  Doc             : 取得したスキーマをもとにテーブル定義初に相当するHTMLファイルを作成する。(output->doc->schema-XXX.html)
　  Generate        : 取得したスキーマをもとに(Behavior,ConditionBean)などのクラスが作成される。
　  OutsideSqlTest  : すべての外だしSQLを実行し整合性チェックをする。
　                    必ずロールバックが走るのでUPDATE文があっても問題ない。
　  Sql2Entity      : 外だしSQLからEntity, ParameterBean,BehaviorQueryPath等の関連クラスが作成される。

　開発者として、どのタスクをどのタイミングで実行すべき？
　外だしSQLを修正 ⇒ Sql2Entity，OutsideSqlTestタスクを実行
　テストデータ追加・変更 ⇒ ReplaceSchema


呼び出し順序
Controller
↓
Logic
↓
result = Bhv(CB)


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
H2のまとめ
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
H2 Data Engineというのが正式名称

embedded (はめ込まれた、埋め込まれた)

  〇インストール～ログインまで
  ・インストーラをダウンロードし、解凍する。
  ・H2 Console を立ち上げる。
  ・「http://localhost:8082」でbrowserを開く
  ・H2はデータベースが未作成の場合、自動で作成してくれるらしいが自分の場合は
    TestConnection時下記エラー (エラーコード 90146)
    Database "C:/Users/{Username}/test" not found, and 
    IFEXISTS=true, so we cant auto-create it [90146-199] 90146/90146 (Help) 
    対策として手動でDBを作成する。
    タスクバーから「H2 Database Engine」を選択し、右クリック「Create a new database」
    パスワードを設定して作成。

  〇接続URLの記述方法
  http://h2database.com/html/cheatSheet.html
  
  jdbc:h2:./test
  ・jdbc:h2:までは固定の記載
  ・./　カレントディレクトリは「H2のインストールディレクトリ/bin」
  ・~/　ホームディレクトリはC:\User\{UserName}
  ・testはDBファイル「test.mv.db」を指す。

  〇H2とはなんぞや
  file:///D:/100_Tools/100_Program/200_Business/H2DatabaseEngine/H2/docs/html/quickstart.html
　＜データベースとしてのH2＞
　・H2では「.mv.db」という拡張子のファイルでDBの情報を保持する。
　・SQLの記述もH2独自のものが用意されている(公式リファレンス参照)
　＜DBMSとしてのH2＞
　・H2コンソールはブラウザ上でDBへの操作が可能。
　・ローカル，サーバともに接続可能。
　・JDBC_APIがサポートされたDBであれば接続可能(H2, Oracle, Postgle etc...)
　＜JDBCとしてのH2＞
　・自身(H2)もJDBC_APIをサポートしている。
　＜組み込みモードとサーバモード＞
　・組み込みモードはローカルのDBへアクセス
　  サーバモードは別PCのDBへアクセスする。


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
O/Rマッパー
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
DB上のデータとアプリケーション(Java)のデータを
自動変換してくれるための機構。

DBFluteの特徴
・JDBCにのみ依存


http://tamata78.hatenablog.com/entry/2016/06/07/202046
http://taktos.hatenablog.com/entry/2014/08/15/DBFlute%E3%82%92%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%A0%E3%81%91%E7%B0%A1%E5%8D%98%E3%81%AB%E8%AA%AC%E6%98%8E%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B

SpringとDB周りのまとめ

■データソースとは
・DBへの接続情報に相当するリソース
・DIコンテナで管理される。

■データソースの種類は3つ
・Springやサードパーティが提供するデータソースを利用。
・アプリケーションサーバ側で定義したデータソースをJNDI経由で取得し利用。
・組み込みデータベース(H2など)をデータソースとして利用する。
  アプリケーション起動時にDBの構築及びデータソースの設定がされる。
  （逆に言うとアプリケーション終了ごとにDBが破棄されるため、
    あらかじめDDLや登録用データが必要。)
  開発時は利用されるが、本格的なアプリにはあまり利用されない。 --- こっちを利用。

■Spring JDBC
SQLの内容に依らず共通処理を行う。
・コネクション管理
・SQL実行
・例外ハンドリング