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()