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删除。