Hibernate中的批量查询方法(一)——>HQL语句

本文介绍了Hibernate中的批量查询方法,包括基本查询、条件查询和分页查询。通过示例展示了HQL语句的使用,如命名占位符和分页查询的实现。强调了在学习Hibernate时理解HQL的重要性。

hibernate中的批量查询方法有以下三种:

本文所有实例所用数据库的内容如下图
在这里插入图片描述

这里需要解释下,下边代码用到的HibernateUtils是我自己编写的工具类。初学hibernate肯定都了解到了,一个项目当中只能有一个sessionFactory对象,那如果我们每次都是用调用空参这个方法来获取sessionfactory对象的话,就不能保证一个项目只存在一个sessionfactory对象。

初学时创建session对象通常都是用以下代码创建的:

Configuration configure = new Configuration().configure();
SessionFactory sessionFactory = configure.buildSessionFactory();
Session session = sessionFactory.openSession()

Hibernate工具类只需要调用opensession()方法就可以直接获得session对象,并且保证只存在一个sessionfactory对象。代码如下:



import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {
	//一个项目 只能有一个  sessionfactory对象, 因此 需要静态代码块,在类加载之间就运行,实现多人调用方法但只一个sessionfactory对象
	private static SessionFactory sf;
	/*静态代码块*/
	static{
		//1 创建,调用空参构造
		Configuration conf = new Configuration().configure();
		//2 根据配置信息,创建 SessionFactory对象
		 sf = conf.buildSessionFactory();
		
	}

	//获得session => 获得全新session
	public static Session openSession(){
				//3 获得session
				Session session = sf.openSession();
				
				return session;
		
	}
	
}

①.hql查询(hibernate独有的查询方法)

基本查询

```


	@Test
	public void fun(){
		//获得session
		Session session = HibernateUtils.openSession();
		//控制事务
		Transaction tx = session.beginTransaction();
		//执行操作
		//-------------------------------------
		//1.书写hql语句
		String hql = "from Customer";//查询所有customer对象
		//2.根据hql语句查询对象
		Query query = session.createQuery(hql);
		//3.根据查询对象获得查询结果
		List<Customer> list = query.list();//返回list结果
		//query.uniqueResult()返回唯一的查询结果
		//-------------------------------------
		
		/*提交事务  关闭session*/
		tx.commit();
		session.close();

	}
}

``

在这里插入图片描述

条件查询

@Test
	//条件查询
	public void fun1(){
		//获得session
		Session session = HibernateUtils.openSession();
		//控制事务
		Transaction tx = session.beginTransaction();
		//执行操作
		//-------------------------------------
		//1.书写hql语句
		//where后边是实体的属性,在整个hql语句中,不会出现任何数据库的相关信息
		String hql = "from Customer where  cust_id = 1";
		//2.根据hql语句查询对象
		Query query = session.createQuery(hql);
		//3.根据查询对象获得查询结果
		Customer customer = (Customer) query.uniqueResult();
		//query.uniqueResult()返回唯一的查询结果
		System.out.println(customer);
		//-------------------------------------

		/*提交事务  关闭session*/
		tx.commit();
		session.close();

	}

在这里插入图片描述
在条件查询中涉及到的占位符问题,代码演示

String hql = "from Customer where  cust_id = ?"
Query query = session.createQuery(hql);
set.parameter(0,1L)   //需要注意的是,在hibernate中第一个?的索引从0开始。
Customer customer = (Customer) query.uniqueResult();

这里的?号占位符在hibernate中可以用:冒号(命名占位符)表示,后边跟上字符代表名称。(注意字符与:之间没有空格),代码演示:

String hql = "from Customer where  cust_id = :cust_id"
Query query = session.createQuery(hql);

set.parameter(“cust_id”,1L);
Customer customer = (Customer) query.uniqueResult();

分页查询

在sql语句中想要分页查询只需要简单的限制每页查询的数目即可:limit ? ,?,第一个?代表起始位置,第二个终止位置。在hql语句中的分页查询则需要调用方法来实现。代码演示如下:

	@Test
	//分页查询
	public void fun2(){
		//获得session
		Session session = HibernateUtils.openSession();
		//控制事务
		Transaction tx = session.beginTransaction();
		//执行操作
		//-------------------------------------
		//1.书写hql语句
		//where后边是实体的属性,在整个hql语句中,不会出现任何数据库的相关信息
		String hql = "from Customer";
		//2.根据hql语句查询对象
		Query query = session.createQuery(hql);

		//--------------------------
		//设置分页信息
		query.setFirstResult(0);//表示从哪个位置开始
		query.setMaxResults(2);//表示一次查询多少条内容

		//--------------------------

		//3.根据查询对象获得查询结果
		List<Customer> list = query.list();
		//query.uniqueResult()返回唯一的查询结果
		System.out.println(list);
		//-------------------------------------

		/*提交事务  关闭session*/
		tx.commit();
		session.close();

	}

查询结果是表里从第一个字段开始,往后算一共两个字段信息。
在这里插入图片描述
HQL语句常用的基本就是这三种方法,涉及到复杂业务的查询,则需要加强自己的HQL语句的学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值