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