黄色电影一区二区,韩国少妇自慰A片免费看,精品人妻少妇一级毛片免费蜜桃AV按摩师 ,超碰 香蕉

Hibernate 查詢(xún)語(yǔ)言

hibernate 查詢(xún)語(yǔ)言

hibernate 查詢(xún)語(yǔ)言(hql)是一種面向?qū)ο蟮牟樵?xún)語(yǔ)言,類(lèi)似于 sql,但不是去對(duì)表和列進(jìn)行操作,而是面向?qū)ο蠛退鼈兊膶傩浴?/p>

hql 查詢(xún)被 hibernate 翻譯為傳統(tǒng)的 sql 查詢(xún)從而對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。

盡管你能直接使用本地 sql 語(yǔ)句,但我還是建議你盡可能的使用 hql 語(yǔ)句,以避免數(shù)據(jù)庫(kù)關(guān)于可移植性的麻煩,并且體現(xiàn)了 hibernate 的 sql 生成和緩存策略。

在 hql 中一些關(guān)鍵字比如 select ,from 和 where 等,是不區(qū)分大小寫(xiě)的,但是一些屬性比如表名和列名是區(qū)分大小寫(xiě)的。

 

from 語(yǔ)句

如果你想要在存儲(chǔ)中加載一個(gè)完整并持久的對(duì)象,你將使用 from 語(yǔ)句。以下是 from 語(yǔ)句的一些簡(jiǎn)單的語(yǔ)法:

string hql = "from employee";
query query = session.createquery(hql);
list results = query.list();

如果你需要在 hql 中完全限定類(lèi)名,只需要指定包和類(lèi)名,如下:

string hql = "from com.hibernatebook.criteria.employee";
query query = session.createquery(hql);
list results = query.list();

 

as 語(yǔ)句

在 hql 中 as 語(yǔ)句能夠用來(lái)給你的類(lèi)分配別名,尤其是在長(zhǎng)查詢(xún)的情況下。例如,我們之前的例子,可以用如下方式展示:

string hql = "from employee as e";
query query = session.createquery(hql);
list results = query.list();

關(guān)鍵字 as 是可選擇的并且你也可以在類(lèi)名后直接指定一個(gè)別名,如下:

string hql = "from employee e";
query query = session.createquery(hql);
list results = query.list();

 

select 語(yǔ)句

select 語(yǔ)句比 from 語(yǔ)句提供了更多的對(duì)結(jié)果集的控制。如果你只想得到對(duì)象的幾個(gè)屬性而不是整個(gè)對(duì)象你需要使用 select 語(yǔ)句。下面是一個(gè) select 語(yǔ)句的簡(jiǎn)單語(yǔ)法示例,這個(gè)例子是為了得到 employee 對(duì)象的 first_name 字段:

string hql = "select e.firstname from employee e";
query query = session.createquery(hql);
list results = query.list();

值得注意的是 employee.firstname 是 employee 對(duì)象的屬性,而不是一個(gè) employee 表的字段。

 

where 語(yǔ)句

如果你想要精確地從數(shù)據(jù)庫(kù)存儲(chǔ)中返回特定對(duì)象,你需要使用 where 語(yǔ)句。下面是 where 語(yǔ)句的簡(jiǎn)單語(yǔ)法例子:

string hql = "from employee e where e.id = 10";
query query = session.createquery(hql);
list results = query.list();

 

order by 語(yǔ)句

為了給 hsq 查詢(xún)結(jié)果進(jìn)行排序,你將需要使用 order by 語(yǔ)句。你能利用任意一個(gè)屬性給你的結(jié)果進(jìn)行排序,包括升序或降序排序。下面是一個(gè)使用 order by 語(yǔ)句的簡(jiǎn)單示例:

string hql = "from employee e where e.id > 10 order by e.salary desc";
query query = session.createquery(hql);
list results = query.list();

如果你想要給多個(gè)屬性進(jìn)行排序,你只需要在 order by 語(yǔ)句后面添加你要進(jìn)行排序的屬性即可,并且用逗號(hào)進(jìn)行分割:

string hql = "from employee e where e.id > 10 " +
             "order by e.firstname desc, e.salary desc ";
query query = session.createquery(hql);
list results = query.list();

 

group by 語(yǔ)句

這一語(yǔ)句允許 hibernate 將信息從數(shù)據(jù)庫(kù)中提取出來(lái),并且基于某種屬性的值將信息進(jìn)行編組,通常而言,該語(yǔ)句會(huì)使用得到的結(jié)果來(lái)包含一個(gè)聚合值。下面是一個(gè)簡(jiǎn)單的使用 group by 語(yǔ)句的語(yǔ)法:

string hql = "select sum(e.salary), e.firtname from employee e " +
             "group by e.firstname";
query query = session.createquery(hql);
list results = query.list();

 

使用命名參數(shù)

hibernate 的 hql 查詢(xún)功能支持命名參數(shù)。這使得 hql 查詢(xún)功能既能接受來(lái)自用戶(hù)的簡(jiǎn)單輸入,又無(wú)需防御 sql 注入攻擊。下面是使用命名參數(shù)的簡(jiǎn)單的語(yǔ)法:

string hql = "from employee e where e.id = :employee_id";
query query = session.createquery(hql);
query.setparameter("employee_id",10);
list results = query.list();

 

update 語(yǔ)句

hql hibernate 3 較 hql hibernate 2,新增了批量更新功能和選擇性刪除工作的功能。查詢(xún)接口包含一個(gè) executeupdate() 方法,可以執(zhí)行 hql 的 update 或 delete 語(yǔ)句。

update 語(yǔ)句能夠更新一個(gè)或多個(gè)對(duì)象的一個(gè)或多個(gè)屬性。下面是使用 update 語(yǔ)句的簡(jiǎn)單的語(yǔ)法:

string hql = "update employee set salary = :salary "  +
             "where id = :employee_id";
query query = session.createquery(hql);
query.setparameter("salary", 1000);
query.setparameter("employee_id", 10);
int result = query.executeupdate();
system.out.println("rows affected: " + result);

 

delete 語(yǔ)句

delete 語(yǔ)句可以用來(lái)刪除一個(gè)或多個(gè)對(duì)象。以下是使用 delete 語(yǔ)句的簡(jiǎn)單語(yǔ)法:

string hql = "delete from employee "  +
             "where id = :employee_id";
query query = session.createquery(hql);
query.setparameter("employee_id", 10);
int result = query.executeupdate();
system.out.println("rows affected: " + result);

 

insert 語(yǔ)句

hql 只有當(dāng)記錄從一個(gè)對(duì)象插入到另一個(gè)對(duì)象時(shí)才支持 insert into 語(yǔ)句。下面是使用 insert into 語(yǔ)句的簡(jiǎn)單的語(yǔ)法:

string hql = "insert into employee(firstname, lastname, salary)"  +
             "select firstname, lastname, salary from old_employee";
query query = session.createquery(hql);
int result = query.executeupdate();
system.out.println("rows affected: " + result);

 

聚合方法

hql 類(lèi)似于 sql,支持一系列的聚合方法,它們以同樣的方式在 hql 和 sql 中工作,以下列出了幾種可用方法:

s.n. 方法 描述
1 avg(property name) 屬性的平均值
2 count(property name or `*`) 屬性在結(jié)果中出現(xiàn)的次數(shù)
3 max(property name) 屬性值的最大值
4 min(property name) 屬性值的最小值
5 sum(property name) 屬性值的總和

distinct 關(guān)鍵字表示只計(jì)算行集中的唯一值。下面的查詢(xún)只計(jì)算唯一的值:

string hql = "select count(distinct e.firstname) from employee e";
query query = session.createquery(hql);
list results = query.list();

 

使用分頁(yè)查詢(xún)

以下為兩種分頁(yè)查詢(xún)界面的方法:

s.n. 方法&描述
1 query setfirstresult(int startposition)
該方法以一個(gè)整數(shù)表示結(jié)果中的第一行,從 0 行開(kāi)始。
2 query setmaxresults(int maxresult)
這個(gè)方法告訴 hibernate 來(lái)檢索固定數(shù)量,即 maxresults 個(gè)對(duì)象。

使用以上兩種方法,我們可以在我們的 web 或 swing 應(yīng)用程序中構(gòu)造一個(gè)分頁(yè)組件。下面是示例,您可以擴(kuò)展到每次取 10 行:

string hql = "from employee";
query query = session.createquery(hql);
query.setfirstresult(1);
query.setmaxresults(10);
list results = query.list();

下一節(jié):hibernate 標(biāo)準(zhǔn)查詢(xún)

hibernate 教程

相關(guān)文章