團隊升級一次不輕易,總要找到足夠的理由或者借口:查詢語法的全面增強;真正徹底的OR映射;性能的提升是三個的主要理由。另外,買一送一的,還有四個暫時不是理由的理由。
查詢語法全面增強
HQL,Native SQL ,Criteria都有大幅增強,不再有太多無法完成需要sql輔助的地方
1.HQL語法增強
使用Antlr的作為語法引擎
支持subquery,distinct, nullif,case ,cast,having count(*)在內的絕大部分SQL語法
支持Bulk-Update,Bulk-Delete 語法
"update Customer set name = :newName where name = :oldName";
2.Native SQL增強
2.0時的Native基本上是流血上市,中看不中用的。3.0時才基本可用。
3. 非完整對象的查詢結果返回Map 而不是Array.
2.0時按array[0],array[1]訪問查詢結果根本是無人敢用的語法,Map的好處是可以按名稱取值
" select new map(goods.goodsNo as goodsNo,goods.code as code) from Goods goods"
Map goods =(Map)list.get(0);
Strng code = (String)goods.get("code");
真正的OR映射
完美支持三種O/R典型映射及其混合
discrim(整個繼續樹在同一個表,通過discrim列區分不同的子類)
unionclass(每個子類一個表,每個表擁有全部屬性)
joinClass(每個父類每個子類各有一個表,父類的屬性在父表,子類的表只包含子類的屬性)
4.discrim支持formula虛擬列做標識符
不再需要一個單獨的discriminator列,可以通過對其他列的計算得出子類的標識符
<discriminator type="int"
formula="CASE WHEN company is null THEN 0 WHEN company = 'JBoss' THEN 1 ELSE 2 END"/>
5.union class支持
<class name="Being" abstract="true">
<id name="id" unsaved-value="0" column="bid">
<generator class="increment"/>
</id>
<PRoperty name="identity" column="ident"/>
<union-subclass name="Human" table="aliens">
<property name="sex" column="sex"/>
</union-subclass>
</class>
要害性能升級
6.column-level lazy fecth
2.0的時候只能對one to many的列 lazy fecth,結果找一個對象經常藤連瓜瓜連藤找出10來個對象出來,很恐怖。3.0終于沒有這個惡夢了。
|
新聞熱點
疑難解答