Hibernate中的批量查询

Hibernate批量查询详解
本文主要介绍了Hibernate中的三种批量查询方式:HQL查询适用于多表但不复杂的情况;Criteria查询适合单表查询;原声SQL查询则用于处理复杂的业务查询。通过实例讲解了每种查询的用法,并强调在原声SQL查询时需要添加指定实体类的代码。

一. Hibernate中的批量查询方式

1. HQL查询----多表查询但是不复杂是使用

2. Criteria查询(无语句查询)----适用单表查询

3. 原声SQL查询----复杂的业务查询

 

二. HQL查询实例讲解

package testHQL;

import hibernateDemo1.Customer;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import HibernateUse.HibernateUtils;

//测试HQL
public class HibernateDemo1 {
	//基本查询
	public void demo1(){
		//1. 获得session
		Session session = HibernateUtils.openSession();
		//2. 控制事务
		Transaction tx = session.beginTransaction();
		//3. 执行操作
		//1> 书写HQL语句
		String hql = "from Customer";//查询所有的Customer对象
		//2> 根据HQL语句创建查询对象
		Query query = session.createQuery(hql);
		//3> 根据查询对象获得查询结果
		List<Customer> list = query.list();//返回list结果
		//query.uniqueResult();//节接收唯一的查询结果
		
		System.out.println(list);
	}
	
	//条件查询
	//HQL语句中,不可能出现任何数据库相关的信息的,只能是类的属性名
		public void demo2(){
			//1. 获得session
			Session session = HibernateUtils.openSession();
			//2. 控制事务
			Transaction tx = session.beginTransaction();
			//3. 执行操作
			//1> 书写HQL语句
			String hql = "from Customer where cust_id = 1";//查询所有的Customer对象
			//2> 根据HQL语句创建查询对象
			Query query = session.createQuery(hql);
			//3> 根据查询对象获得查询结果
			Customer c = (Customer)query.uniqueResult();//节接收唯一的查询结果
			
			System.out.println(c);
			
		}
		//条件查询
		//问号占位符
			public void demo3(){
				//1. 获得session
				Session session = HibernateUtils.openSession();
				//2. 控制事务
				Transaction tx = session.beginTransaction();
				//3. 执行操作
				//1> 书写HQL语句
				String hql = "from Customer where cust_id = ?";//查询所有的Customer对象
				//2> 根据HQL语句创建查询对象
				Query query = session.createQuery(hql);
				//设置参数
				//query.setLong(0,1l);
				query.setParameter(0,1l);
				//3> 根据查询对象获得查询结果
				Customer c = (Customer)query.uniqueResult();//节接收唯一的查询结果
				
				System.out.println(c);	
			}
			//条件查询
			//命名占位符
			 public void demo4(){
					//1. 获得session
					Session session = HibernateUtils.openSession();
					//2. 控制事务
					Transaction tx = session.beginTransaction();
					//3. 执行操作
					//1> 书写HQL语句
					String hql = "from Customer where cust_id = : cust_id";//查询所有的Customer对象
					//2> 根据HQL语句创建查询对象
					Query query = session.createQuery(hql);
					//设置参数
					query.setParameter("cust_id", 1l);
					//3> 根据查询对象获得查询结果
					Customer c = (Customer)query.uniqueResult();//节接收唯一的查询结果
					
					System.out.println(c);	
				}

//条件查询
//HQL语句中,不可能出现任何数据库相关的信息的,只能是类的属性名
public void demo5(){
	//1. 获得session
	Session session = HibernateUtils.openSession();
	//2. 控制事务
	Transaction tx = session.beginTransaction();
	//3. 执行操作
	//1> 书写HQL语句
	String hql = "from Customer";//查询所有的Customer对象
	//2> 根据HQL语句创建查询对象
	Query query = session.createQuery(hql);
	//设置分页信息limit?,?
	query.setFirstResult(0);//从第0条开始抓
	query.setMaxResults(1);//抓一条记录出来
    //3> 根据查询对象获得查询结果
	List<Customer> c = query.list();//节接收唯一的查询结果
						
	System.out.println(c);
}

	public static void main(String args[]){
		HibernateDemo1 hl = new HibernateDemo1();
		hl.demo3();
	}
}

 

二. Criteria查询实例讲解

package testCriteria;

import hibernateDemo1.Customer;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

import HibernateUse.HibernateUtils;

//测试Criteria
public class HibernateDemo1 {
	//基本查询
	public void demo1(){
		//1. 获得session
		Session session = HibernateUtils.openSession();
		//2. 控制事务
		Transaction tx = session.beginTransaction();
		//3. 执行操作
		Criteria criteria = session.createCriteria(Customer.class);//查询所有的Customer对象
		List<Customer> list = criteria.list();//返回list结果
		//query.uniqueResult();//节接收唯一的查询结果
		System.out.println(list);
		//4. 提交事务关闭资源
		tx.commit();
		session.close();
	}
	
	//条件查询
	// >              gt
	// >=             ge
	// <              lt
	// <=             le
	// ==             eq
	// !=             ne
	// in             in
	// between and    between  
	// like           like
	// is not null    isNotNull
	// is null        isNull
	// or             or
	// and            and
		public void demo2(){
			//1. 获得session
			Session session = HibernateUtils.openSession();
			//2. 控制事务 
			Transaction tx = session.beginTransaction();
			//3. 执行操作
			//创建criteria查询对象
			Criteria criteria = session.createCriteria(Customer.class);
			//添加查询参数-》查询cust_id为1的Customer对象
			criteria.add(Restrictions.eq("cust_id",1l));
			//执行查询获得结果
			Customer c = (Customer)criteria.uniqueResult();
			System.out.println(c);
			//4.提交事务,关闭资源
			tx.commit();
			session.close();
		}
	
			//条件查询
			//查询总行数
			 public void demo4(){
					//1. 获得session
					Session session = HibernateUtils.openSession();
					//2. 控制事务
					Transaction tx = session.beginTransaction();
					//3. 执行操作
					Criteria criteria = session.createCriteria(Customer.class);
					//设置查询的聚合函数-》总行数
					criteria.setProjection(Projections.rowCount());
					
					Long count = (Long) criteria.uniqueResult();
					
					System.out.println(count);	
					
					//4.提交事务,关闭资源
					tx.commit();
					session.close();
				}

//分页查询

public void demo5(){
	//1. 获得session
	Session session = HibernateUtils.openSession();
	//2. 控制事务
	Transaction tx = session.beginTransaction();
	//3. 执行操作
	//创建criteria查询对象
	Criteria criteria = session.createCriteria(Customer.class);
	//设置分页信息
	criteria.setFirstResult(0);
	criteria.setMaxResults(1);
	//执行查询
    List<Customer> list = criteria.list();				
	System.out.println(list);
	
	//4.提交事务,关闭资源
	tx.commit();
	session.close();
}

	public static void main(String args[]){
		HibernateDemo1 hl = new HibernateDemo1();
		hl.demo4();
	}
}

 

三. 原声SQL查询实例讲解、

要注意的是,这种查询方式中要加入一行代码:query.addEntity(Customer.class);

package testSQL;

import hibernateDemo1.Customer;

import java.util.Arrays;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;

import HibernateUse.HibernateUtils;

//测试SQL
public class HibernateDemo1 {
	//基本查询
	public void demo1(){
		//1. 获得session
		Session session = HibernateUtils.openSession();
		//2. 控制事务
		Transaction tx = session.beginTransaction();
		//3. 执行操作
		//1> 书写SQL语句
		String sql = "select *from cst_customer";//查询所有的Customer对象
		//2> 根据SQL语句创建查询对象
		SQLQuery query = session.createSQLQuery(sql);
		//3> 根据查询对象获得查询结果
		List<Object[]> list = query.list();//返回list结果
		//query.uniqueResult();//节接收唯一的查询结果
		
		for(Object[] objs:list){
			System.out.println(Arrays.toString(objs));
		}
	    
		//4. 提交事务,关闭资源
		tx.commit();
		session.close();
	}
	
	//基本查询
		public void demo2(){
			//1. 获得session
			Session session = HibernateUtils.openSession();
			//2. 控制事务
			Transaction tx = session.beginTransaction();
			//3. 执行操作
			//1> 书写SQL语句
			String sql = "select *from cst_customer";//查询所有的Customer对象
			//2> 根据SQL语句创建查询对象
			SQLQuery query = session.createSQLQuery(sql);
			//3> 指定结果集封装到哪个对象中
			query.addEntity(Customer.class);
			
			List<Customer> list = query.list();//返回list结果
			System.out.println(list);
			
			//4. 提交事务,关闭资源
			tx.commit();
			session.close();
		}
		//条件查询
		//问号占位符
			public void demo3(){
				//1. 获得session
				Session session = HibernateUtils.openSession();
				//2. 控制事务
				Transaction tx = session.beginTransaction();
				//3. 执行操作
				//1> 书写SQL语句
				String sql = "select *from cst_customer where cust_id = ?";//查询所有的Customer对象
				//2> 根据SQL语句创建查询对象
				SQLQuery query = session.createSQLQuery(sql);
				query.setParameter(0, 1l);//设置第一问号处的内容
				query.addEntity(Customer.class);//指定结果集封装到哪个对象中
				//3> 根据查询对象获得查询结果
				List<Customer> list = query.list();//返回list结果
				
				System.out.println(list);
				
				//4. 提交事务,关闭资源
				tx.commit();
				session.close();
			}
			
//条件查询
//分页查询
public void demo5(){
	//1. 获得session
	Session session = HibernateUtils.openSession();
	//2. 控制事务
	Transaction tx = session.beginTransaction();
	//3. 执行操作
	//1> 书写SQL语句
	String sql = "select *from cst_customer limit ?,?";//查询所有的Customer对象
	//2> 根据SQL语句创建查询对象
	SQLQuery query = session.createSQLQuery(sql);
	query.setParameter(0, 0);//设置第一问号处的内容
	query.setParameter(1, 1);
	
	query.addEntity(Customer.class);
	//3> 根据查询对象获得查询结果
	List<Customer> list = query.list();//返回list结果
						
	System.out.println(list);
	
	//4. 提交事务,关闭资源
	tx.commit();
	session.close();
}

	public static void main(String args[]){
		HibernateDemo1 hl = new HibernateDemo1();
		hl.demo3();
	}
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值