Hibernate查詢語言是怎樣的
Hibernate查詢語言 Hibernate配備了一種非常強大的查詢語言,這種語言看上去很像SQL。
但是不要被語法結構 上的相似所迷惑,HQL是非常有意識的被設計為完全面向對象的查詢,它可以理解如繼承、多態 和關聯之類的概念。 大小寫敏感性問題 除了Java類與屬性的名稱外,查詢語句對大小寫并不敏感。
所以 SeLeCT 與 sELEct 以及 SELECT 是相同的,但是 org。hibernate。
eg。FOO 并不等價于 org。
hibernate。eg。
Foo 并且 foo。barSet 也不等價于 foo。
BARSET。 本手冊中的HQL關鍵字將使用小寫字母。
很多用戶發現使用完全大寫的關鍵字會使查詢語句 的可讀性更強, 但我們發現,當把查詢語句嵌入到Java語句中的時候使用大寫關鍵字比較難看。 關聯(Association)與連接(Join) 我們也可以為相關聯的實體甚至是對一個集合中的全部元素指定一個別名, 這時要使用關鍵字join。
1。from Cat as cat 2。
inner join cat。mate as mate 3。
left outer join cat。kittens as kitten 4。
from Cat as cat left join cat。 mate。
kittens as kittens 5。from Formula form full join form。
parameter param 受支持的連接類型是從ANSI SQL中借鑒來的。 ◆inner join(內連接) ◆left outer join(左外連接) ◆right outer join(右外連接) ◆full join (全連接,并不常用) 還有,一個"fetch"連接允許僅僅使用一個選擇語句就將相關聯的對象或一組值的集合隨著他們的父對象的初始化而被初始化,這種方法在使用到集合的情況下尤其有用,對于關聯和集合來說,它有效的代替了映射文件中的外聯接 與延遲聲明(lazy declarations)。
以上介紹Hibernate查詢語言。
hibernate 查詢語句
因為hibernate是封裝了JDBC的框架。
文中第一句:String queryString ="from *****";我想樓主應該知道這是HQL語句,TbArea 是你在hibertate 配置文件中定義的名稱.propertyName + "= ?";是屬性名
這句話可以看做正常的sql語句是
select * from TbArea as a where a.屬性名 = 你在程序中傳過來的參數;
第二句:
Query queryObject = getSession().createQuery(queryString);
是hibernate里面封裝好的方法,取得你session對象,并創建Query對象。。該對象在Hibernate中你可以了解為jdbc的statement對象.
queryString就是你執行的sql語句.
第三句:
*ameter(0, value);
queryObject我想樓主不是很熟練JDBC吧。這個對象基本和statement相似.這種寫法是最常用的,優點我不太記得。
setParameter也就是設置你第一句HQL語句中的問號。設置參數.value為你方法中傳進來的參數
return *();返回查詢到的多行數據,做為列表形式返回。
hibernate查詢語言
1 .from 1.1單表查詢 from * as cat.其中,cat只是一個別名,為了用其他子語句的時候書寫簡單 1.2多表查詢 from *,* from * as cat,* as dog 2 join相關 (inner) join left (outer) join right (outer) join full join HQL同樣對SQL中的這些特性支持 下面插播一個小話題,關于上邊的那些特性,我一直都沒怎么用,今天既然說到這里,就想 把上邊的幾個特性的用法說一下,也算對自己的一個補充: 假設有兩個表:部門、員工,下面列舉一些數據: 員工(Employee): ID Name DepNo 001 Jplateau 01 002 Jony 01 003 Camel 02 部門(Department): ID Name 01 研發部 02 營銷部 在Hibernate中我們操縱的都是對象,所以我們操縱的是部門類和員工類 1).(inner) join select * as id1,* as name1,* as id2,* as name2 from Employee as employee join Department as department on *= * (注意到條件語句我用on 沒有用where) 那么執行結果是什么呢? id1 name1 id2 name2 ++++++++++++++++++++++++++++++++++++++ 001 Jplateau 01 研發部 002 Jony 01 研發部 2).left (outer) join select * as id1,* as name1,* as id2,* as name2 from Employee as employee left join Department as department on *= * 那么執行結果又該是什么呢? id1 name1 id2 name2 ++++++++++++++++++++++++++++++++++++++ 001 Jplateau 01 研發部 002 Jony 01 研發部 003 Camel null null {就是說此時我要已第一個表的記錄多少為準,第二個表中沒有相應紀錄的時候填充null} 3). right (outer) join select * as id1,* as name1,* as id2,* as name2 from Employee as employee right join Department as department on *= * 那么執行結果又該是什么呢? id1 name1 id2 name2 ++++++++++++++++++++++++++++++++++++++ 001 Jplateau 01 研發部 002 Jony 01 研發部 null null 02 營銷部 {就是說此時我要已第二個表的記錄多少為準,第一個表中沒有相應紀錄的時候填充null} 3 大小寫敏感 4。
select語句 就是要確定你要從查詢中返回哪些對象或者哪些對象的屬性。寫幾個例子吧: select employee form Employee as employee select employee form Employee as employee where * like 'J%' select * form Employee as employee where * like 'J%' select * as id1,* as name1,* as id2,* as name2 from Employee as employee right join Department as department on *= * select elements(*) from Employee as employee (不明白elements到底是做什么用的?望給于說明) 等等 5。
數學函數 JDO目前好像還不支持此類特性。 avg(。
), sum(。), min(。
), max(。) count(*) count(。
), count(distinct 。), count(all。
) 其用法和SQL基本相同 select distinct * from Employee as employee select count(distinct *),count(employee) from Employee as employee 6。polymorphism (暫時不知道如何解釋?) from * as animal 不光得到所有Animal得實例,而且可以得到所有Animal的子類(如果我們定義了一個子類Cat) 一個比較極端的例子 from * as o 可以得到所有持久類的實例 7。
where語句 定義查詢語句的條件,舉幾個例子吧: from Employee as employee where *='Jplateau' from Employee as employee where * like 'J%' from Employee as employee where * like '%u' 在where語句中“=”不光可以比較對象的屬性,也可以比較對象,如: select animal from * as animal where *=dog 8。表達式 在SQL語句中大部分的表達式在HQL中都可以使用: mathematical operators +, -, *, / binary comparison operators =, >=, <=, <>, !=, like logical operations and, or, not string concatenation || SQL scalar functions like upper() and lower() Parentheses ( ) indicate grouping in, between, is null JDBC IN parameters ? named parameters :name, :start_date, :x1 (這種應該是另一種"?"的變通解決方法) SQL literals 'foo', 69, '1970-01-01 10:00:01.0' Java public static final constants * 其他不必解釋了,在這里我只想對查詢中的參數問題說明一下: 大家知道在SQL中進行傳遞參數進行查詢的時候,我們通常用PreparedStatement,在語句中寫一大堆的“?”, 在hql中也可以用這種方法,如: List mates = *( "select * from Employee as employee " + "where *=? ", name, * ); (說明:上面利用Session里的find方法,在hibernate的api Session中重載了很多find方法,它可以滿。
如何用hibernate直接進行SQL語句查詢
我寫個簡單的例子,樓主可以參考下public int getLogin(String username,String password)
{ String sql="select * from user_table where username=? and password=?";
SQLQuery query=getSession().createSQLQuery(sql).addEntity(*);
*ing(0,username);
*ing(1,password);
return *nt(*Result().toString());
}
public static void main(String[] args) {
new UserTableDAO().getLogin("zhang","yuan");
}
轉載請注明出處華閱文章網 » hibernate的查詢語句