- 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 }
