sql與hql
A. 關於hql與sql,以下哪些說法正確.0202a.hql與sql沒什麼差別02 0202b.hql面
sql 面向資料庫表查詢hql 面向對象查詢hql : from 後面跟的 類名+類對象 where 後 用 對象的屬性做條件sql: from 後面跟的是表名 where 後 用表中欄位做條件查詢在Hibernate中使用查詢時,一般使用Hql查詢語句。HQL(Hibernate Query Language),即Hibernate的查詢語言跟SQL非常相像。不過HQL與SQL的最根本的區別,就是它是面向對象的。
B. hql和sql的區別
資料庫中hql與sql的區別:
1、sql 面向資料庫表查詢。
2、hql 面向對象查詢。
3、hql : from 後面跟的 類名+類對象 where 後 用 對象的屬性做條件。
4、sql: from 後面跟的是表名 where 後 用表中欄位做條件查詢。
5、在Hibernate中使用查詢時,一般使用Hql查詢語句。
6、HQL(Hibernate Query Language),即Hibernate的查詢語言跟SQL非常相像。不過HQL與SQL的最根本的區別,就是它是面向對象的。
C. 淺談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();
}
D. hibernate 用sql和hql的區別
sql
面向資料庫表查詢
hql
面向對象查詢
hql
:
from
後面跟的
類名+類對象
where
後
用
對象的屬性做條件
sql:
from
後面跟的是表名
where
後
用表中欄位做條件
查詢
在Hibernate中使用查詢時,一般使用Hql查詢語句。
HQL(Hibernate
Query
Language),即Hibernate的查詢語言跟SQL非常相像。不過HQL與SQL的最根本的區別,就是它是面向對象的。
E. sql與hql的區別
sql是對資料庫進行操作的.hql是對對象進行操作的.
F. hql語句與sql語句區別
hql是hibernate的調用資料庫的語言,也就是把sql語句用對象封裝了一下,然後通過hibernate自動轉換成對應的sql語句。
sql就是普通的資料庫語言。
G. sql語句與hql語句有什麼不同
基本上一樣。只不過hql是用於ORM,即對象映射。
可能你在用的時候,普通的sql是大小寫不區分,並且欄位名與資料庫一致。
而hql則是大小寫區分,欄位名與你定義的pojo對象一致。
H. Hibernate 的HQL和sql有什麼區別
sql 面向資料庫表查詢
hql 面向對象查詢
hql : from 後面跟的 類名+類對象 where 後 用 對象的屬性做條件
sql: from 後面跟的是表名 where 後 用表中欄位做條件
查詢
在Hibernate中使用查詢時,一般使用Hql查詢語句。
HQL(Hibernate Query Language),即Hibernate的查詢語言跟SQL非常相像。不過HQL與SQL的最根本的區別,就是它是面向對象的。