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

被折叠的 条评论
为什么被折叠?



