1. 程式人生 > >Hibernate中各種查詢方法的總結

Hibernate中各種查詢方法的總結

Hibernate中各種查詢方法的總結:

1.使用HQL語句

Query q = session.createQuery("select e from com.sun.demo.Emp e");

2.使用Load方法(主鍵查詢)

Emp e = (Emp)session.load(Emp.class, 1141);

3.使用get方法(主鍵查詢)

Emp e = (Emp)session.get(Emp.class, 1141);

4.引數化查詢(使用?萬用字元,或者命令萬用字元)

Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename=?");

q.setParameter(0, "SMITH");

Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename like ?");

q.setParameter(0, "%M%");

Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename like :lkename");

q.setParameter("lkename", "%L%");

5.命名查詢

<query name="myquery">

<![CDATA[

from com.sun.hibernate.Employer where job = ?

]]>

</query>

Query q = session.getNamedQuery("myquery");

q.setParameter(0, "MANAGER");

6.屬性查詢

Query q = session.createQuery("select max(sal) from Employer e where sal is not null");

Query q = session.createQuery("select distinct job from Employer e"

);

7.例項化查詢

步驟如下:

1.編寫你的HQL語句

2.建立普通的Java -------------------POJO類不同,它與資料庫沒有任何關係

3.在該java類中你需要建立和查詢結果對應的欄位

4.在該java類中,你需要建立合適的建構函式

5.完善你的HQL語句,使用例項化查詢的方式進行包裝

6.通過list.get(i)獲取的結果就不再是一個數組,而是一個包裝後的物件

例子:

Query q = session.createQuery("SELECT new com.sun.demo.UserDate(ename,SYSDATE) FROM Userinfo");

List list = q.list();

for(int i=0;i<list.size();i++){

UserDate u = (UserDate)list.get(i);

System.out.println(u.getEname());

}

8.多型查詢

對於pojo來說,java中的這種關係被擴充套件到了資料庫表中

hibernate在查詢一個表的同時,會檢查該表所對應的POJO類有沒有子類,如果有,一起查詢出來

9.分頁查詢

//查詢第三到五條

q.setFirstResult(3);//從第三條開始

q.setMaxResults(3);//提取三條

10.uniqueResult方法查詢(查詢結果只能是一個欄位)

Query q = session.createQuery("select count(*) from Employer");

Long count = (Long)q.uniqueResult();

11.Criteria查詢(通過面向物件化的設計,將資料查詢條件封裝為一個物件)

Criteria c = session.createCriteria(Employer.class);

c.addOrder(Order.asc("sal"));//按薪水升序查詢

c.setFirstResult(3);

c.setMaxResults(3);

List list = c.list();

for(int i=0;i<list.size();i++){

Employer emp = (Employer)list.get(i);

System.out.println(emp.getEname() + " : " + emp.getSal());

}