H2 Databaseの取扱い
- 基本情報
- データベース接続設定
- データ型マッピング
- 主キーでの自動採番
- ページング検索の条件
- 更新ロックの取得
- プロシージャ
- データベース依存機能
- DBMS独自の利用方法
- Exampleのススメ
- H2 Database補足資料
基本情報
- 対応バージョン
- H2 1.0.x 以上
- JDBCドライバの同梱
- あり
- (同梱)JDBCドライバ
- h2-1.2.x.jar
JDBCドライバは随時(そのときの最新バージョンに)アップグレードしていきます。
データベース接続設定
データベース接続設定(databaseInfoMap.dfprop)について。
データベース接続設定の仕様 (Embeddedの場合) @databaseInfoMap.dfprop
map:{
    ; driver   = org.h2.Driver
    ; url      = jdbc:h2:file:../src/main/resources/[...]/[dbname]
    ; schema   = [SCHEMA]
    ; user     = [dbuser]
    ; password = [dbpassword]
}
	- catalog はそもそも対応する概念がないため設定不要
- schema は独自のスキーマを利用しない限りは PUBLIC と指定
- [xxx]の[]は単なる表現上(ドキュメント上)の囲み
以下、実際のExampleプロジェクトでの設定例です。
e.g. dbflute-spring-exampleの場合 {dbname=exampledb,schema=PUBLIC} @databaseInfoMap.dfprop
map:{
    ; driver   = org.h2.Driver
    ; url      = jdbc:h2:file:../src/main/resources/exampledb/exampledb
    ; schema   = PUBLIC
    ; user     = sa
    ; password = 
}
	
	データ型マッピング
データベース上のデータ型とプログラム型との(デフォルトの)マッピングについて。
- java.lang.String
- CHAR, VARCHAR, CLOB, TEXT
- java.lang.Integer
- INT, TINYINT, SMALLINT, {NUMERIC(1-9, 0)}
- java.lang.Long
- BIGINT, IDENTITY, {NUMERIC(10-18, 0)}
- java.math.BigDecimal
- DOUBLE, REAL, NUMERIC(n, m)
- java.util.Date
- DATE
- java.sql.Time
- TIME
- java.sql.Timestamp
- TIMESTAMP
- java.lang.Boolean
- BOOL
- byte[]
- BLOB, BINARY
自動マッピング
NUMERIC に関しては、自動マッピング機能が利用可能です。
未サポートのデータ型
- VARCHAR(_IGNORE_CASE)
- どうやって利用する?...*未検証
- UUID
- byte[]にマッピングされるが...*未検証
- ARRAY
- 一応普通の文字列としてin、outはできるが...*未検証
- OTHER
- 一応16進数の文字列としてin, outはできるが...*未検証
主キーでの自動採番
自動採番(連番)の仕組みとして シーケンス と Identity のどちらかを利用します。
Identity情報はメタデータから取得できるので、設定なしで利用可能です。
ページング検索の条件
limit、offset を利用します。
ConditionBeanのPaging
e.g. ConditionBeanでページング検索 {81-100} @DisplaySql
...
 order by ...
 limit 20 offset 80
	
	OutsideSqlのManualPaging
e.g. OutsideSqlのManualPagingでページング検索 {81-100} @OutsideSql
/*IF pmb.isPaging()*/
select ...
-- ELSE select count(*)
/*END*/
  from ...
 where ...
 /*IF pmb.isPaging()*/
 order by ...
 limit /*$pmb.fetchSize*/20 offset /*$pmb.pageStartIndex*/80
 /*END*/
	- offset や limit ではバインド変数が利用できないので、埋め込み変数("$" を付与)を利用すること
TypedParameterBean における ManualPaging の自動判別ロジックは、"limit" かつ "offset" という文字列が含まれること、もしくは、"limit" かつ "pmb.fetchSize" という文字列が含まれることです。 ("pmb.fetchSize" だけは大文字小文字は区別し、他は区別せず)
更新ロックの取得
ConditionBean の lockForUpdate() では、for update を利用します。
e.g. ConditionBeanで更新ロックの取得 (cb.lockForUpdate()) @DisplaySql
select ...
  from MEMBER dfloc
 where ...
   and ...
 for update
	プロシージャ
H2 Databaseのストアドプロシージャに関する全てが 未検証 です。
データベース依存機能
データベース依存機能を有効にした場合の利用可能な機能について。
H2 Databaseに関しては特になし
DBMS独自の利用方法
別スキーマの利用
別スキーマのテーブルを自動生成でき...*未検証
Exampleのススメ
H2 Database を使ったExample実装 dbflute-spring-example があります。
H2 Database補足資料
Identity設定
e.g. Identity設定 {MEMBERのMEMBER_IDにIdentity} @DDL
create table MEMBER (
    MEMBER_ID INTEGER IDENTITY NOT NULL PRIMARY KEY,
    MEMBER_NAME VARCHAR(200) NOT NULL,
    ...
) ;
	発行された連番を insert 実行後に取得
e.g. 発行された連番を insert 実行後に取得 @SQL
CALL IDENTITY()








