DBFlute 1.0.5G Released

ごーじー

DBFlute-1.0.5G was released.
「ごーじー」です「ごーじー」

DBFlute Top
Change Log
Migration Point

オープンソースプロダクト「DBFlute」
のリリース通知です。
(プログラマー向けの内容です)

SchemaHTMLでの複合インデックス表現の改善

今までは、
例えば、A, B, Cという複合ユニークキーがあった場合、

 A - o+
 B - o+
 C - o+

という風に + が付くようになっていて、
どこがトップカラムなのかわかりませんでした。
ツールチップにカラムの構成が出てはきますが直感的では
ありませんでした。

それが...

 A - o+
 B - +o
 C - +o

という風になります。
 -> SchemaHTMLのサンプルの購入テーブル

Aが基点になって、他のカラムを+している。
BやCは、他のカラムから+されている。
というようなニュアンスです。

厳密には、複合インデックスが何個もある場合、
しかも、カラムが重なって色々とある場合、
「トップでもありサブでもある」という状況もあります。
その場合は o+ となります。
「自分がトップカラムとして活躍するインデックスが一つ以上ある」
という印になります。

検索クエリーを書くときは、検索条件で利用するカラムに、
そのカラムがトップになっているインデックスが付いているか
どうかがとりあえず重要です。(厳密には色々ありますが)
ということで、トップかサブかを直感的にわかるようにしました。

ユニークキーで update() できるように

一件更新は、PKによる更新が基本でしたが、
ユニークキーでも更新できるようにしました。

update() - ユニークキーで更新 | DBFlute

これにより、PKを取得するためだけの事前検索が不要になります。
(PKを取得する利用が他にあるなら別にOKですが)

また、insertOrUpdate() でも利用できます。
プログラム上では、ビジネスキー (ユニークキー) だけ持っている場合、
今までは insertOrUpdate() が利用できず、
分岐のための事前検索をしなければなりませんでしたが、
ユニークキーで insertOrUpdate() が利用できます。

Java8に向けたポテンシャルの増強 but Java6でも使える

全開に引き続き、DBFlute-1.1 への仕様を先立って入れています。
基本的にデフォルトは OFF ですが、Java6, 7でも便利なものも
ありますので、ピンポイントで選んで利用できます。
将来的なアップグレードを見越して利用しておくとよいものもあります。

littleAdjustmentMap.dfprop で指定できます。
詳しくは、また別途ブログで紹介したいと思いますが、
取り急ぎ、ここに列挙しておきます。
コンパイルエラーが発生しなければOKなもの
試しにやってみて、コンパイルエラーが発生しなければ、
将来のためにも利用しておくとよいものたちです。

isCompatibleSelectByPKOldStyle = false
 -> selectByPKValue() が selectByPK() に

isCompatibleSelectByPKWithDeletedCheck = false
 -> selectByPKValueWithDeletedCheck() を生成しない

isMakeConditionQueryExistsReferrerToOne = false
 -> one-to-oneへのExistsReferrerを生成しない

isMakeConditionQueryInScopeRelationToOne = false
 -> one-to-oneへのInScopeRelationを生成しない

isMakeConditionQueryPlainListManualOrder = false
 -> ManualOrderのList引数のメソッドを生成しない
開発初めであれば、やっておいた方がいいもの
isCompatibleOrScopeQueryPurposeNoCheck = false
 -> OrScopeQueryの中でsetupSelectやorderByを例外に

isThatsBadTimingDetect = true
 -> SubQueryの中で外側のCBを利用できないように
 -> Java8のラムダの心配なところ...
そもそも Java8 で動かす人は...
isCompatibleBeforeJava8 = false

とやれば、これら全てが有効になります。
加えて、selectEntity() の戻りが Optional に、
関連テーブルの Entity が Optional になります。

ぜひとも、検討してみてください。