hibernate中的批量查詢 HQL查詢 Criteria查詢和原生SQL查詢


  • HQL查詢----hibernate query language查詢-------適合用在簡單的多表查詢情況
  • Criteria查詢------適合在單表查詢情況下使用
  • 原生的SQL查詢-----復雜的業務查詢

      Hibernate獨家查詢語言

 1 public class HqlDemo {
    //查詢語句中本來應該是select * from Custmoer的完整類名,但是因為在工程只有一個Customer類,所以可不使用完整類名, select *可省略
2 //寫死的hql查詢,注意CUST_NAME='Lisi'中存在的單引號,如果查詢的結果為多個結果,則使用query.createUniqueResult() 3 @Test 4 public void func1(){ 5 Session session= HibernateUtil.openSession(); 6 Transaction transaction=session.beginTransaction(); 7 String hql="from Customer where CUST_NAME='Lisi'"; 8 Query query=session.createQuery(hql); 9 List<Customer> list=query.list(); 10 System.out.println(list); 11 transaction.commit(); 12 HibernateUtil.closeSession(session); 13 } 14 15 16 17 18 //hql問號占位符查詢,因為hql語句中只有一個問號,所以其位置為0,所以在setParameter的時候第一個參數為0 19 @Test 20 public void func2(){ 21 Session session= HibernateUtil.openSession(); 22 Transaction transaction=session.beginTransaction(); 23 String hql="from Customer where CUST_NAME= ?"; 24 Query query=session.createQuery(hql); 25 query.setParameter(0, "Lisi"); 26 List<Customer> list=query.list(); 27 System.out.println(list); 28 transaction.commit(); 29 HibernateUtil.closeSession(session); 30 } 31 32 33 34 //hql冒號占位符查詢 35 @Test 36 public void func3(){ 37 Session session= HibernateUtil.openSession(); 38 Transaction transaction=session.beginTransaction(); 39 String hql="from Customer where CUST_NAME= :cust_name"; 40 Query query=session.createQuery(hql); 41 query.setParameter("cust_name","Lisi"); 42 List<Customer> list=query.list(); 43 System.out.println(list); 44 transaction.commit(); 45 HibernateUtil.closeSession(session); 46 } 47 48 49 //hibernate分頁查詢 50 @Test 51 public void func4(){ 52 Session session= HibernateUtil.openSession(); 53 Transaction transaction=session.beginTransaction(); 54 String hql="from Customer "; 55 Query query=session.createQuery(hql); 56 query.setFirstResult(0);//從第幾條開始抓取 57 query.setMaxResults(2);//抓幾條 58 List<Customer> list=query.list(); 59 System.out.println(list); 60 transaction.commit(); 61 HibernateUtil.closeSession(session); 62 } 63 }

 

Criteria查詢,不用編寫sql語句,直接傳參即可

 1 public class CriteriaDemo {
 2     //Criteria基本查詢,注意criteria()雖然接收的是字符串,但是類名不要加雙引號
 3     @Test
 4     public void func1(){
 5         Session session= HibernateUtil.openSession();
 6         Transaction transaction=session.beginTransaction();
 7         Criteria criteria=session.createCriteria(Customer.class);
 8         List<Customer> list=criteria.list();
 9         System.out.println(list);
10         transaction.commit();
11         HibernateUtil.closeSession(session);
12     }
13 
14 
15     //Criteria條件查詢
16     @Test
17     public void func2(){
18         Session session= HibernateUtil.openSession();
19         Transaction transaction=session.beginTransaction();
20         Criteria criteria=session.createCriteria(Customer.class);
21         criteria.add(Restrictions.eq("cust_name","Lisi"));
22         criteria.add(Restrictions.or(Restrictions.gt("cust_level",2),Restrictions.lt("cust_level","4")));
23         List<Customer> list=criteria.list();
24         System.out.println(list);
25         transaction.commit();
26         HibernateUtil.closeSession(session);
27     }
28 
29 
30     //Criteria分頁查詢
31     @Test
32     public void func3(){
33         Session session= HibernateUtil.openSession();
34         Transaction transaction=session.beginTransaction();
35         Criteria criteria=session.createCriteria(Customer.class);
36         criteria.setFirstResult(1);
37         criteria.setMaxResults(2);
38         List<Customer> list=criteria.list();
39         System.out.println(list);
40         transaction.commit();
41         HibernateUtil.closeSession(session);
42     }
43 
44     //Criteria統計總行數
45     //可以使用Projections.max()  Projection.min()統計某一列的最大值最小值
46     @Test
47     public void func4(){
48         Session session= HibernateUtil.openSession();
49         Transaction transaction=session.beginTransaction();
50         Criteria criteria=session.createCriteria(Customer.class);
51         criteria.setProjection(Projections.rowCount());
52         Long count=(Long)criteria.uniqueResult();
53         System.out.println(count);
54         transaction.commit();
55         HibernateUtil.closeSession(session);
56     }
57 }

 criteria條件查詢相關api

 

 

SQL語句原生查詢

 1     //SQL原生查詢中的基本查詢
 2     @Test
 3     public void func1(){
 4         Session session= HibernateUtil.openSession();
 5         Transaction transaction=session.beginTransaction();
 6         String sqlString="select * from CUST";
 7         SQLQuery sqlQuery=session.createSQLQuery(sqlString);
 8         //SQLQuery查詢將查詢到的每一行都封裝為一個Object[],因為有多行,所以返回的類型為List<Object[]>
 9         List<Object[]> list=sqlQuery.list();
10         System.out.println(list);
11         transaction.commit();
12         HibernateUtil.closeSession(session);
13     }
14 
15     //SQL原生查詢中的基本查詢
16     @Test
17     public void func2(){
18         Session session= HibernateUtil.openSession();
19         Transaction transaction=session.beginTransaction();
20         String sqlString="select * from CUST";
21         SQLQuery sqlQuery=session.createSQLQuery(sqlString);
22         sqlQuery.addEntity(Customer.class);//通過此種方式使hibernate將返回的結果封裝為Customer類型
23         List<Customer> list=sqlQuery.list();
24         System.out.println(list);
25         transaction.commit();
26         HibernateUtil.closeSession(session);
27     }
28 
29     //SQL原生查詢中的條件查詢
30     @Test
31     public void func3(){
32         Session session= HibernateUtil.openSession();
33         Transaction transaction=session.beginTransaction();
34         String sqlString="select * from CUST where cust_name=?";
35         SQLQuery sqlQuery=session.createSQLQuery(sqlString);
36         sqlQuery.addEntity(Customer.class);
37         sqlQuery.setParameter(0,"Lisi");
38         List<Customer> list=sqlQuery.list();
39         System.out.println(list);
40         transaction.commit();
41         HibernateUtil.closeSession(session);
42     }
43 
44     //SQL原生查詢中的分頁查詢
45     @Test
46     public void func4(){
47         Session session= HibernateUtil.openSession();
48         Transaction transaction=session.beginTransaction();
49         String sqlString="select * from CUST";
50         SQLQuery sqlQuery=session.createSQLQuery(sqlString);
51         sqlQuery.addEntity(Customer.class);
52         sqlQuery.setFirstResult(1);
53         sqlQuery.setMaxResults(2);
54         List<Customer> list=sqlQuery.list();
55         System.out.println(list);
56         transaction.commit();
57         HibernateUtil.closeSession(session);
58     }
59 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM