求助,這樣查詢的hql語句應該怎么寫?我想通過UId查詢PCre 愛問知
top語法HQL不支持 變通的方法是 String HQL = "from Photo p where *='"+id+"' order by PCredit desc"; Query query = *Query(HQL); //設定起始位置 *stResult(0); //設定個數 *Results(2); //返回值是一個list,里面就是排序的前兩個對象 List resList = *(); 謝謝!。
hibernate查詢語言
1 .from1.1單表查詢from * as cat.其中,cat只是一個別名,為了用其他子語句的時候書寫簡單1.2多表查詢from *,*m * as cat,* as dog2 join相關(inner) joinleft (outer) joinright (outer) joinfull joinHQL同樣對SQL中的這些特性支持下面插播一個小話題,關于上邊的那些特性,我一直都沒怎么用,今天既然說到這里,就想把上邊的幾個特性的用法說一下,也算對自己的一個補充:假設有兩個表:部門、員工,下面列舉一些數據:員工(Employee):ID Name DepNo001 Jplateau 01002 Jony 01003 Camel 02部門(Department):ID Name01 研發部02 營銷部在Hibernate中我們操縱的都是對象,所以我們操縱的是部門類和員工類1).(inner) joinselect * as id1,* as name1,* as id2,* 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) joinselect * as id1,* as name1,* as id2,* 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) joinselect * as id1,* as name1,* as id2,* 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,* 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 *=dog8。表達式在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查詢語句,請高手解釋一下【200分】
JPQL語句支持兩種方式的參數定義方式: 命名參數和位置參數。
。在同一個查詢語句中只允許使用一種參數定義方式。
命令參數的格式為:“: +參數名”例:Query query = *Query("select p from Person p where *id=:Id");*ameter("Id",new Integer(1));位置參數的格式為“?+位置編號”例:Query query = *Query("select p from Person p where *id=?1");*ameter(1,new Integer(1));。
請教Hibernate 的 Criteria 的 in 查詢
Hibernate中提供了三種查詢方式,分別為HQL、Criteria查詢、本地化SQL查詢,實際應用中,有很多人忽略了Criteria的用處,覺得不如另外兩種貼近SQL方式便捷,實際則未必,很多情況下Criteria更具有優勢;本篇文章就對Criteria查詢做一個全面的介紹,以期盡可能的將更多的Criteria強大的查詢功能展現出來;1、首先新建一個Maven Web Project項目,本次使用的是hibernate4.3.11版本,使用MySql數據庫,添加如下依賴:[html] view plain copy * 新建完畢后,項目結構如下:2、entity包下面放置的是通過Hibernate反向工程生成的實體映射類,samples包下面放置測試類,同樣*文件需要配置,在此就不一一展示了,好了,準備工程就這么多,下面開始介紹Criteria的實際操作;3、Criteria查詢3.1 獲取Criteria對象[java] view plain copypackage *s; import *ia; import *n; import *nFactory; import *uration; import *; import *; import *; import *; import *oyee; public class HibernateTest { // 聲明一個Hibernate Session類型的變量 private Session session; @Before public void getSession(){ Configuration config = new Configuration().configure(); SessionFactory sessionFactory = *essionFactory(); session = *ssion(); } @After public void closeSession(){ if(session != null){ *(); } } @Test public void doCreateCriteriaInstance(){ // 獲取Criteria實例對象 Criteria criteria = *Criteria(*); *NotNull(criteria); } } 3.2 在SQL中,我們可以通過WHERE關鍵字對條件進行定義,那么在Criteria中呢?看例子[java] view plain copy@Test public void doConditionQueryInCriteria() { // 獲取Criteria實例對象 Criteria criteria = *Criteria(*); // 查詢出王姓員工且收入在3000到5000之間的 // 類似于HQL中 WHERE employeeName LIKE '王%' AND salary BETWEEN 3000 AND 5000 List emps = *(*("employeeName", "王%")) .add(*n("salary", 3000.0, 5000.0)).list(); // 查詢出工資在4000以下或5000以上的王姓員工 // 可以通過Restrictions的or或and進行邏輯分組 emps = *(*("employeeName", "王%")) .add(*(*("salary", 5000D), *("salary", 3000D))).list(); // 查詢出崗位是軟件工程師或測試工程師,且學歷是碩士、本科或大專的員工有哪些 emps = *(*("position", new String[] { "軟件工程師", "測試工程師" })) .add(*ction().add(*("degree", "碩士")).add(*("degree", "本科")) .add(*("degree", "大專"))) .list(); } 上述三個查詢可以看出Restrictions類提供了內建Cretirion類型來滿足各種查詢狀況,此外Criteria還有一個特別強大的功能,那就是允許你直接指定SQL查詢,看例子[html] view plain copyList emps = *(*triction("birthday > '1980-01-01' AND employee_name like '劉%'")).list(); 上述無論是birthday還是employee_name都是數據庫中表的字段名稱,看起來是不是特別好用,此外還可以直接通過屬性實例構建查詢條件,比如要查詢出學習是高中、中專的員工有哪些:[java] view plain copyList emps = *(*e("degree").in(new String[]{"高中","中專"})).list(); 3.3 對結果集進行排序,同樣可以分為上述兩種方式[java] view plain copyList emps = *(*triction("birthday > '1970-01-01'")).addOrder(*("birthday")) .addOrder(*("salary")).list(); List emps = *(*triction("birthday > '1970-01-01'")) .addOrder(*e("birthday").asc()).addOrder(*e("salary").desc()).list(); 3.4 上述幾個例子直接演示了對我們想要實體的操作,大家都知道每個實體都會有好多關聯實體,比如一個請假實體類會關聯請假申請人與審批人、一篇博客會關聯作者和分類信息實體、一個訂單會關聯多個商品實體,顧客實體,地址實體等,如果此時我們想通過對關聯實體的限制,最終限制想要的實體,那應該怎么處理呢,看例子;[java] view plain copy// 比如我們想查詢北京各個公司中,員工學歷中包括高中、中專、大專的公司部門有哪些 List depts = *(*triction("dept_name LIKE '北京%'")) .createCriteria("slEmployees").add(*("degree", new String[]{"高中","中專","大專"})).list(); 上述方法生成下列SQL文[sql] view plain 。
怎么用Hibernate寫SQL里的in式的子查詢
我寫個簡單的例子,樓主可以參考下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怎樣查看sql語句
弄hibernate時,想顯示sql語句,可以設置show_sql為true來達到這個目的,但是參數值全是像PreparedStatement一樣,用?來代替的。
用p6spy可以達到顯示的那些參數原值的目的,但可讀性差。可以利用SQL Profiler來處理這個事情。
p6spy:
SQL Profile:
p6spy安裝:
* 將*放到WEB-INF/lib目錄下,將*ties放到WEB-INF/classes目錄下。
* 修改你 原有 JDBC Driver為:*.P6SpyDriver
* 修改 *ties 中的 realdriver 值為 原有 的JDBC Driver,比如我的是:*
* 完成,運行web server。
我的日志記錄產生在 %TOMCAT_HOME%\bin下,此log位置可以能過修改 logfile = x:\x_dir\* 來控制
打開看看,看里面的日志是不是看起來比較不爽?下面我們安裝SQL Profiler來讓自已的視線爽一點。
SQL Profiler安裝:(須p6spy成功安裝)
* 將SQL Profiler自帶的*ties覆蓋原來的classes目錄下文件
* 修改現在*ties中realdriver 值為 原有 的JDBC Driver
看后看看readme注意這幾句 ^__^ :
1. Start the GUI
2. Start the webapp, in starts doing some JDBC requests we will ignore
3. Press the "reset" button on the GUI
4. Make a request to the webapp
5. Press the "pause" button after the request has finished executing
6. Press the "report" button to save profiling results as a CSV file
* 我們先用java -jar * 運行 sql profiler
* 然后啟動web server :-)
一切盡在眼前了吧?
轉載請注明出處華閱文章網 » hibernatein查詢語句