欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Hibernate之數據檢索

Hibernate之數據檢索- -

                                      

數據檢索
數據查詢(xún)與檢索是Hibernate中的一個(gè)亮點(diǎn)。相對其他ORM實(shí)現而言,Hibernate提供了靈活多樣的查詢(xún)機制。其中包括:
1. Criteria Query
2. Hibernate Query Language (HQL)
3. SQL
Criteria Query
Criteria Query通過(guò)面向對象化的設計,將數據查詢(xún)條件封裝為一個(gè)對象。簡(jiǎn)單來(lái)講,Criteria Query可以看作是傳統SQL的對象化表示,如:
Criteria criteria = session.createCriteria(TUser.class);
criteria.add(Expression.eq("name","Erica"));
criteria.add(Expression.eq("sex",new Integer(1)));
這里的criteria 實(shí)例實(shí)際上是SQL “Select * from t_user where name=’Erica’ and sex=1”的封裝(我們可以打開(kāi)Hibernate 的show_sql 選項,
以觀(guān)察Hibernate在運行期生成的SQL語(yǔ)句)。
Hibernate 在運行期會(huì )根據Criteria 中指定的查詢(xún)條件(也就是上面代碼中通過(guò)criteria.add方法添加的查詢(xún)表達式)生成相應的SQL語(yǔ)句。
這種方式的特點(diǎn)是比較符合Java 程序員的編碼習慣,并且具備清晰的可讀性。正因為此,不少ORM實(shí)現中都提供了類(lèi)似的實(shí)現機制(如Apache OJB)。
對于Hibernate的初學(xué)者,特別是對SQL了解有限的程序員而言,Criteria Query無(wú)疑是上手的極佳途徑,相對HQL,Criteria Query提供了更易于理解的查詢(xún)手段,借助IDE的Coding Assist機制,Criteria的使用幾乎不用太多的學(xué)習。
Criteria 查詢(xún)表達式
Criteria 本身只是一個(gè)查詢(xún)容器,具體的查詢(xún)條件需要通過(guò)Criteria.add方法添加到Criteria實(shí)例中。
如前例所示,Expression 對象具體描述了查詢(xún)條件。針對SQL 語(yǔ)法,Expression提供了對應的查詢(xún)限定機制,包括:
方法 描述
Expression.eq 對應SQL“field = value”表達式。
如Expression.eq("name","Erica")
Expression.allEq 參數為一個(gè)Map對象,其中包含了多個(gè)屬性-值對應關(guān)系。相當于多個(gè)Expression.eq關(guān)系的疊加。
Expression.gt 對應SQL中的 “field > value ” 表達式
Expression.ge 對應SQL中的 “field >= value” 表達式
Expression.lt 對應SQL中的 “field < value” 表達式
Expression.le 對應SQL中的 “field <= value” 表達式
Expression.between 對應SQL中的 “between” 表達式
如下面的表達式表示年齡(age)位于13到50區間內。
Expression.between("age",new Integer(13),new Integer(50));
Expression.like 對應SQL中的 “field like value” 表達式
Expression.in 對應SQL中的 ”field in …” 表達式
Expression.eqProperty 用于比較兩個(gè)屬性之間的值,對應SQL中的“field= field”。
如:
Expression.eqProperty("TUser.groupID","TGroup.id");
Expression.gtProperty 用于比較兩個(gè)屬性之間的值,對應SQL中的“field > field”。
Expression.geProperty 用于比較兩個(gè)屬性之間的值,對應SQL中的“field >= field”。
Expression.ltProperty 用于比較兩個(gè)屬性之間的值,對應SQL中的“field < field”。
Expression.leProperty 用于比較兩個(gè)屬性之間的值,對應SQL中的“field <= field”。
Expression.and and關(guān)系組合。
如:
Expression.and(
Expression.eq("name","Erica"),
Expression.eq(
"sex",
new Integer(1)
)
);
Expression.or or關(guān)系組合。
如:
Expression.or(
Expression.eq("name","Erica"),
Expression.eq("name","Emma")
);
Expression.sql 作為補充,本方法提供了原生SQL語(yǔ)法的支持。我
們可以通過(guò)這個(gè)方法直接通過(guò)SQL語(yǔ)句限定查詢(xún)
條件。
下面的代碼返回所有名稱(chēng)以“Erica”起始的記錄:
Expression.sql(
“lower({alias}.name) like lower(?)”,
"Erica%",
Hibernate.STRING
);
其中的“{alias}”將由Hibernate在運行期使
用當前關(guān)聯(lián)的POJO別名替換。
注意Expression 各方法中的屬性名參數(如Express.eq中的第一個(gè)參數),這里所謂屬性名是POJO中對應實(shí)際庫表字段的屬性名(大小寫(xiě)敏感),而非庫表中的實(shí)
際字段名稱(chēng)。
Criteria 高級特性
限定返回的記錄范圍
通過(guò)criteria. setFirstResult/setMaxResults 方法可以限制一次查詢(xún)返回的記錄范圍:
Criteria criteria = session.createCriteria(TUser.class);
//限定查詢(xún)返回檢索結果中,從第一百條結果開(kāi)始的20條記錄
criteria.setFirstResult(100);
criteria.setMaxResults(20);
對查詢(xún)結果進(jìn)行排序
//查詢(xún)所有g(shù)roupId=2的記錄
//并分別按照姓名(順序)和groupId(逆序)排序
Criteria criteria = session.createCriteria(TUser.class);
criteria.add(Expression.eq("groupId",new Integer(2)));
criteria.addOrder(Order.asc("name"));
criteria.addOrder(Order.desc("groupId"));
Criteria作為一種對象化的查詢(xún)封裝模式,不過(guò)由于Hibernate在實(shí)現過(guò)程中將精力
更加集中在HQL查詢(xún)語(yǔ)言上,因此Criteria的功能實(shí)現還沒(méi)做到盡善盡美(這點(diǎn)上,OJB
的Criteria 實(shí)現倒是值得借鑒),因此,在實(shí)際開(kāi)發(fā)中,建議還是采用Hibernate 官
方推薦的查詢(xún)封裝模式:HQL。
Hibernate Query Language (HQL)
Criteria提供了更加符合面向對象編程模式的查詢(xún)封裝模式。不過(guò),HQL(Hibernate
Query Language)提供了更加強大的功能,在官方開(kāi)發(fā)手冊中,也將HQL作為推薦的查詢(xún)
模式。
相對Criteria,HQL提供了更接近傳統SQL語(yǔ)句的查詢(xún)語(yǔ)法,也提供了更全面的特性。
最簡(jiǎn)單的一個(gè)例子:
String hql = "from org.hibernate.sample.TUser";
Query query = session.createQuery(hql);
List userList = query.list();
上面的代碼將取出TUser的所有對應記錄。
如果我們需要取出名為“Erica”的用戶(hù)的記錄,類(lèi)似SQL,我們可以通過(guò)SQL 語(yǔ)句加
以限定:
String hql =
"from org.hibernate.sample.TUser as user where user.name=‘Erica‘";
Query query = session.createQuery(hql);
List userList = query.list();
其中我們新引入了兩個(gè)子句“as”和“where”,as子句為類(lèi)名創(chuàng )建了一個(gè)別名,而where
子句指定了限定條件。
HQL 子句本身大小寫(xiě)無(wú)關(guān),但是其中出現的類(lèi)名和屬性名必須注意大小寫(xiě)區分。
關(guān)于HQL,Hibernate 官方開(kāi)發(fā)手冊中已經(jīng)提供了極其詳盡的說(shuō)明和示例,詳見(jiàn)
Hibernate官方開(kāi)發(fā)手冊(Chapter 11)。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
五、hibernate的Session操作, 查詢(xún)過(guò)濾, 緩存利用, 批量處理
Hibernate的DetachedCriteria使用(含Criteria)
Hibernate 復合查詢(xún) - Winbomb - 網(wǎng)易博客
Hibernate入門(mén)之Criteria 查詢(xún)
hibernate--basedao,借鑒別人的完善自己的
學(xué)習筆記之 O/R 映射技術(shù)的王牌Hibernate框架
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久