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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hql与sql的区别

發布時間:2025/3/13 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hql与sql的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.hql與sql的區別

sql 面向數據庫表查詢

hql 面向對象查詢

hql : from 后面跟的 類名+類對象 where 后 用 對象的屬性做條件

sql: from 后面跟的是表名???????????? where 后 用表中字段做條件

查詢

?????? 在Hibernate中使用查詢時,一般使用Hql查詢語句。

HQL(Hibernate Query Language),即Hibernate的查詢語言跟SQL非常相像。不過HQL與SQL的最根本的區別,就是它是面向對象的。

使用HQL時需要注意以下幾點:

l???????? 大小寫敏感

因為HQL是面向對象的,而對象類的名稱和屬性都是大小寫敏感的,所以HQL是大小寫敏感的。

Eg.

HQL語句:from Cat as cat where cat.id > 1;與from Cat as cat where cat.ID > 1;是不一樣的,這點與SQL不同。

l???????? from子句

Eg. from Cat,該句返回Cat對象實例,開發人員也可以給其加上別名,eg. from Cat as cat,對于多表查詢的情況,可參考如下:

from Cat as cat, Dog as dog

其它方面都與SQL類似,在此不再贅述。

接下來講一個在Hibernate中查詢的例子。

1.1簡單查詢

List list = session.createQuery("from User as user order by user.loginName").list();

1.2帶單個參數的查詢

List list = session.find("from User as user where user.loginName=?",

?????????????????????????????????????????????????????????? loginName,

?????????????????????????????????????????????????????????? Hibernate.STRING);

1.3多個參數的查詢

Eg1. 此例采用“?”占位符的方式

String hql = "from User as user where user.loginName=? and user.orgId=? ";Query query = session.createQuery(hql);query.setParameter(1, 'amigo');query.setParameter(2, new Long(1)) ;List list = query .list();

Eg2. 此例采用“:paramName”的方式

String hql = "from User as user where user.loginName=:loginName and user.orgId=:orgId ";Query query = session.createQuery(hql);query.setParameter('loginName', 'amigo');query.setParameter('orgId', new Long(1)) ;List list = query .list();

1.4查詢數量

int count = (Integer) session.createQuery("select count(*) from User").uniqueResult().intValue();

1.5限制查詢起始值和數量的查詢

這種一般是在記錄需要分頁的時候需要用到,例如,在如下的代碼中,限制查詢的開始記錄的位置為50,最大查詢條數為50。

String hql = "from User as user order by user.loginName";int firstResult= 50;int maxResults = 50;Query query = session.createQuery(hql);query = query.setFirstResult(firstResult);query.setMaxResults(maxResults);

1.6子查詢

在某些情況下,也需要用到子查詢,例如在下面的例子中,User為用戶對象,UserRole為用戶與角色關聯對象。如下HQL語句將沒有分配角色的用戶對象查找出來。

String hql = "from User user where user.loginName"+ " not in(select ur.user.loginName from UserRole ur) ";List list = (session.createQuery(hql)).list();

1.7原生SQL查詢

對于某些復雜的查詢語句,需要調用某種特定的數據庫的特定函數才能解決,Hibernate雖然不推薦使用原生SQL語句來查詢,因為這將破壞數據庫的易移植性,但是Hibernate中也提供了使用原生SQL進行查詢的方法,只需要獲得連接即可。

Eg. 在下面的例子中,用到了Sql Server數據庫中的原生sql語句,如下所示:

String timeUnit = "13";String sql = "select count(*) count, CONVERT(VARCHAR(" + timeUnit +"), log.gen_datetime,121) timeUnit " + "from Log log";SQLQuery query = session.createSQLQuery(sql).addScalar("count", Hibernate.INTEGER).addScalar("timeUnit", Hibernate.STRING);List list = query.list();

2 新增

?????? 在數據庫中新增記錄在Hibernate中不需要使用insert命令,只需要構造新增的對象后,調用Session對象的save(…)方法即可。

2.1新增單個對象

?????? 新增單個對象的實例如下,該實例將在用戶表中新增一條記錄。

Session session = HibernateSessionFactory.getSession();Transaction ts = null;try {ts = session.beginTransaction();User user = new User();user.setLoginName("amigo");user.setFullName("阿蜜果");……session.save(user) ;ts.commit();} catch (Exception e) {if (ts != null) {ts.rollback();}} finally {HibernateSessionFactory.closeSession();}

2.2批量新增對象

對于批量新增對象的情況,需要在新增一部分對象后flush和clear一次,例如,沒批量新增20個對象時手動的flush一次,假設在list為一個用戶列表,里面包含很多User對象,那么要將實現這些對象的批量新增,可采用如下方法:

Session session = HibernateSessionFactory.getSession();Transaction ts = null;try {ts = session.beginTransaction();for (int i = 0; i < list.size(); i++) {User user = (User) list.get(i);session.save(user) ;if (i % 20 == 0) {session.flush();session.clear();}}ts.commit();} catch (Exception e) {if (ts != null) {ts.rollback();}} finally {HibernateSessionFactory.closeSession();}

3 更新

?????? 在hibernate中,更新對象前不需要使用查詢語句:update…,一般需要在取得需要更新的持久化對象后,執行Session對象的update(…)方法。例如:

Session session = HibernateSessionFactory.getSession();Transaction ts = null;try {ts = session.beginTransaction();//取得持久化對象User user = session.get(User.class, "amigo");//對需要修改的屬性進行修改user.setFullName("阿蜜果");……session.update(user) ;ts.commit();} catch (Exception e) {if (ts != null) {ts.rollback();}} finally {HibernateSessionFactory.closeSession();}

4 刪除

4.1刪除單個對象

?????? 一般在取得某對象后,開發人員可以調用Session對象的delete(…)方法刪除該對象。

Eg. 下面的實例中取得loginName(主鍵)為“amigo”的User對象后,將它刪除。

Session session = HibernateSessionFactory.getSession();Transaction ts = null;try {ts = session.beginTransaction();//取得持久化對象User user = session.get(User.class, "amigo");session.delete(user) ;ts.commit();} catch (Exception e) {if (ts != null) {ts.rollback();}} finally {HibernateSessionFactory.closeSession();}

4.2批量刪除對象

對于批量刪除對象的情況,開發人員可以在取得待刪除的對象列表后,一個一個的將對象刪除,對于每個對象的刪除方法,見3.4.1小節。開發人員還可以hql語句來做批量刪除。

Eg. 該實例通過delete語句來刪除記錄,除了loginName為“amigo”的對象為,其余都刪除,代碼如下所示:

Session session = HibernateSessionFactory.getSession();Transaction ts = null;try {ts = session.beginTransaction();String hql = "delete User as user where user.loginName != 'amigo'";Query query = session.createQuery(hql);int count = query.executeUpdate();ts.commit();System.out.println("delete count : " + count); //刪除條數} catch (Exception e) {if (ts != null) {ts.rollback();}} finally {HibernateSessionFactory.closeSession();}

轉載于:https://www.cnblogs.com/OOAbooke/archive/2012/01/16/2323556.html

總結

以上是生活随笔為你收集整理的hql与sql的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产又粗又硬又长又爽的演员 | 激情综合网婷婷 | 男女激情实录 | 狂野欧美性猛交xxⅹ李丽珍 | 国产污视频网站 | 国产一区二区在线视频观看 | 四虎成人精品 | 欧美日韩va | 好吊色欧美一区二区三区视频 | 日韩av影视大全 | 香蕉人妻av久久久久天天 | 96久久久| 特级毛片在线播放 | 国产精品一区在线看 | 99精品人妻少妇一区二区 | 一边吃奶一边摸做爽视频 | japanese国产在线观看 | 狠狠插av | 日本一本二本三区免费 | 又色又爽又高潮免费视频国产 | 一区二区三区久久精品 | 亚洲校园激情 | 人妻精品久久久久中文字幕69 | aaaaa级少妇高潮大片免费看 | 日韩成人免费视频 | 欧美一级黄色片视频 | 久久久久五月天 | 久久久久久av无码免费网站 | 亚洲高清免费视频 | 人妻 丝袜美腿 中文字幕 | 日日插夜夜爽 | 欧美天天影院 | 日本三级吃奶头添泬无码苍井空 | 美女黄视频网站 | 黑人巨大精品欧美一区二区蜜桃 | 成人欧美一区二区三区在线观看 | 爆乳熟妇一区二区三区 | 免费看麻豆| 男女视频免费 | 亚洲一区二区免费 | 色婷在线 | 肉嫁高柳在线 | 亚洲人免费 | 日韩1级片 | 国产精品igao | 一本大道伊人av久久综合 | 91成人品 | 久久久久久久久久99 | 亚洲av无码一区二区三区人 | 欧亚av| 欧美一级色 | 亚洲妇女av| 制服丝袜影音先锋 | 日韩专区中文字幕 | 欧美日韩在线一区二区三区 | 麻豆福利影院 | 国产男女裸体做爰爽爽 | 男人和女人做爽爽视频 | 亚洲久草视频 | 操极品女神 | 日韩有码中文字幕在线观看 | 日日爽视频 | 欧美日韩国产精品一区二区三区 | 黄色大片日本 | 三级久久| 日韩一区二区在线播放 | 91性| 欧美怡红院视频一区二区三区 | 韩国成人理伦片免费播放 | 超碰国产人人 | 小小姑娘电影大全免费播放 | 欧洲精品一区二区三区 | 波多野结衣福利 | 91久久一区二区 | 天堂在线中文8 | 九九热在线视频免费观看 | 男人日女人免费视频 | 亚洲不卡中文字幕 | 仙踪林av | 动漫美女揉胸 | 色5566 | 亚洲精品a级 | 久久久久久久久久久99 | 亚洲精品在线视频 | 交视频在线播放 | 美女黄色片网站 | 黄色成人免费观看 | 在线免费日本 | 秋霞亚洲 | 日本一区二区免费高清视频 | 日本不卡在线视频 | 国产特黄大片aaaa毛片 | 久国产| 黄色男同视频 | 自拍日韩亚洲一区在线 | 理论片在线观看视频 | 91久久综合精品国产丝袜蜜芽 | 91视频直接看 | 97视频一区|