日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

六种方式实现hibernate查询

發(fā)布時(shí)間:2025/3/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 六种方式实现hibernate查询 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

hibernate查詢的6種方法。分別是HQL查詢
,對(duì)象化查詢Criteria方法,動(dòng)態(tài)查詢DetachedCriteria,例子查詢,sql查詢,命名查詢

???????????如果單純的使用hibernate查詢數(shù)據(jù)庫(kù)只需要懂其中的一項(xiàng)就可以完成想要實(shí)現(xiàn)的一般功能,但是
從一個(gè)點(diǎn),讓我們掌握6中方法,則提供了更多選擇。每一種方法都有其適用的情況與前提。

HQL查詢

HQL是hibernate自己的一套查詢語(yǔ)言,于SQL語(yǔ)法不同,具有跨數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)。示例代碼:

static?void?query(String?name){
??Session?s
=null;
??
try{
???s
=HibernateUtil.getSession();
???
???
//from后面是對(duì)象,不是表名
???String?hql="from?Admin?as?admin?where?admin.aname=:name";//使用命名參數(shù),推薦使用,易讀。
???Query?query=s.createQuery(hql);
???query.setString(
"name",?name);
???
???List
<Admin>?list=query.list();
???
???
for(Admin?admin:list){
????System.out.println(admin.getAname());
???}
??}
finally{
???
if(s!=null)
???s.close();
??}
?}
復(fù)制代碼

?

適用情況:常用方法,比較傳統(tǒng),類似jdbc。缺點(diǎn):新的查詢語(yǔ)言,適用面有限,僅適用于Hibernate框架。

對(duì)象化查詢Criteria方法

?

static?void?cri(String?name,String?password){
??Session?s
=null;
??
try{
???s
=HibernateUtil.getSession();
???
???Criteria?c
=s.createCriteria(Admin.class);
???c.add(Restrictions.eq(
"aname",name));//eq是等于,gt是大于,lt是小于,or是或
???c.add(Restrictions.eq("apassword",?password));
???
???List
<Admin>?list=c.list();
???
for(Admin?admin:list){
????System.out.println(admin.getAname());
???}
??}
finally{
???
if(s!=null)
???s.close();
??}
?}

復(fù)制代碼

?

適用情況:面向?qū)ο蟛僮?#xff0c;革新了以前的數(shù)據(jù)庫(kù)操作方式,易讀。缺點(diǎn):適用面較HQL有限。

動(dòng)態(tài)分離查詢DetachedCriteria

?

static?List?dc(DetachedCriteria?dc)?{

??Session?s?
=?HibernateUtil.getSession();
??Criteria?c?
=?dc.getExecutableCriteria(s);
??List?rs?
=?c.list();
??s.close();
??
return?rs;
?}
復(fù)制代碼

?

?

DetachedCriteria?dc?=?DetachedCriteria.forClass(User.class);
??
int?id?=?1;
??
if?(id?!=?0)
???dc.add(Restrictions.eq(
"id",?id));
??Date?age?
=?new?Date();
??
if?(age?!=?null)
???dc.add(Restrictions.le(
"birthday",?age));
??List?users?
=?dc(dc);
??System.out.println(
"離線查詢返回結(jié)果:"?+?users);

復(fù)制代碼

?

適用情況:面向?qū)ο蟛僮?#xff0c;分離業(yè)務(wù)與底層,不需要字段屬性攝入到Dao實(shí)現(xiàn)層。? 缺點(diǎn):適用面較HQL有限。

例子查詢

static?List?example(User?user)?{
??Session?s?
=?HibernateUtil.getSession();
??List
<User>?users?=?s.createCriteria(User.class).add(
????Example.create(user)).list();
??
//?List<User>
??
//?users2=s.createCriteria(User.class).add((Example.create(user)).ignoreCase())
??
//?.createCriteria("child").add((Example.create(user))).list();
??return?users;
?}

復(fù)制代碼

?

適用情況:面向?qū)ο蟛僮鳌?? 缺點(diǎn):適用面較HQL有限,不推薦。


sql查詢

static?List?sql()?{

??Session?s?
=?HibernateUtil.getSession();
??Query?q?
=?s.createSQLQuery("select?*?from?user").addEntity(User.class);
??List
<User>?rs?=?q.list();
??s.close();
??
return?rs;
?}

復(fù)制代碼

?

適用情況:不熟悉HQL的朋友,又不打算轉(zhuǎn)數(shù)據(jù)庫(kù)平臺(tái)的朋友,萬(wàn)能方法?? 缺點(diǎn):破壞跨平臺(tái),不易維護(hù),不面向?qū)ο蟆?/p>

命名查詢

?

static?List?namedQuery(int?id)?{
??Session?s?
=?HibernateUtil.getSession();
??Query?q?
=?s.getNamedQuery("getUserById");
??q.setInteger(
"id",?id);
??
return?q.list();
?}
復(fù)制代碼

?

<?xml?version="1.0"?encoding="utf-8"?>
<!DOCTYPE?hibernate-mapping?PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>

<hibernate-mapping>
????
<class?name="com.sy.vo.User"?table="user"?catalog="news">
????
?

????
</class>
????
<!--?命名查詢:定義查詢條件?-->
????
<query?name="getUserById">
?????
<![CDATA[from?User?where?id=:id]]>
????
</query>
????
<!--?命名查詢中使用sql,不推薦使用,影響跨數(shù)據(jù)庫(kù)
????<sql-query?name="getUserById2">
?????<![CDATA[select?*?from?User?where?]]>
????</sql-query>?
-->
</hibernate-mapping>

復(fù)制代碼

?

適用情況:萬(wàn)能方法,有點(diǎn)像ibatis輕量級(jí)框架的操作,方便維護(hù)。? 缺點(diǎn):不面向?qū)ο蟆;趆ql和sql,有一定缺陷。

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的六种方式实现hibernate查询的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。