Hibernate中的批量查询(概述)
一共提供了三种查询方式
HQL查询(多表查询,但不复杂时使用):hibernate query language
hibernate独家查询语言,属于面向对象的查询语言
基本查询
@Test
//基本查询
public void fun1() {
//1.获得session
Session session = HibernateUtils.openSession();
//2.控制事务
Transaction tx = session.beginTransaction();
//3.执行操作
//------------------------------------------
//1> 先书写HQL语句
//String hql = "from cn.itheima.domain.Customer";
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);
//------------------------------------------
//4.提交事务,关闭资源
tx.commit();
session.close();
}
条件查询
@Test
//条件查询
//HQL语句中,不可能出现任何数据库相关的信息的
public void fun2() {
//1.获得session
Session session = HibernateUtils.openSession();
//2.控制事务
Transaction tx = session.beginTransaction();
//3.执行操作
//------------------------------------------
//1> 先书写HQL语句
//String hql = "from cn.itheima.domain.Customer";
String hql = "from Customer where cust_id = 1 ";
//查询id为1的Customer(条件填属性名)
//2> 根据HQL语句创建查询语句
Query query = session.createQuery(hql);
//3> 根据查询对象获得查询结果
Customer c = (Customer) query.uniqueResult();
System.out.println(c);
//------------------------------------------
//4.提交事务,关闭资源
tx.commit();
session.close();
}
@Test
//条件查询
//问号占位符的使用
public void fun3() {
//1.获得session
Session session = HibernateUtils.openSession();
//2.控制事务
Transaction tx = session.beginTransaction();
//3.执行操作
//------------------------------------------
//1> 先书写HQL语句
//String hql = "from cn.itheima.domain.Customer";
String hql = "from Customer where cust_id = ? ";
//查询id为1的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);
//------------------------------------------
//4.提交事务,关闭资源
tx.commit();
session.close();
}
@Test
//条件查询
//命名占位符的使用
public void fun4() {
//1.获得session
Session session = HibernateUtils.openSession();
//2.控制事务
Transaction tx = session.beginTransaction();
//3.执行操作
//------------------------------------------
//1> 先书写HQL语句
//String hql = "from cn.itheima.domain.Customer";
String hql = "from Customer where cust_id = :cust_id ";
//:号自动识别为占位符
//2> 根据HQL语句创建查询语句
Query query = session.createQuery(hql);
//设置参数
query.setParameter("cust_id",1l);
//3> 根据查询对象获得查询结果
Customer c = (Customer) query.uniqueResult();
System.out.println(c);
//------------------------------------------
//4.提交事务,关闭资源
tx.commit();
session.close();
}
分页查询
@Test
//分页查询
public void fun5() {
//1.获得session
Session session = HibernateUtils.openSession();
//2.控制事务
Transaction tx = session.beginTransaction();
//3.执行操作
//------------------------------------------
//1> 先书写HQL语句
String hql = "from Customer ";
//查询id为1的Customer(条件填属性名)
//2> 根据HQL语句创建查询语句
Query query = session.createQuery(hql);
//设置分页信息
query.setFirstResult(0);
query.setMaxResults(1);
//3> 根据查询对象获得查询结果
List<Customer> list = query.list();
System.out.println(list);
//------------------------------------------
//4.提交事务,关闭资源
tx.commit();
session.close();
}
Criteria查询(单表查询)
Hibernate自创的无语句面向对象查询
基本查询
@Test
//基本查询
public void fun1() {
//1.获得session
Session session = HibernateUtils.openSession();
//2.控制事务
Transaction tx = session.beginTransaction();
//3.执行操作
//------------------------------------------
//查询所有customer对象
Criteria criteria = session.createCriteria(Customer.class);
List<Customer> list = criteria.list();
//criteria.uniqueResult();
System.out.println(list);
//------------------------------------------
//4.提交事务,关闭资源
tx.commit();
session.close();
}
条件查询
@Test
//条件查询
//HQL语句中,不可能出现任何数据库相关的信息的
// > gt
// >= ge
// <= lt
// == eq
// != ne
// in in
// between and between
// like like
// is not null isNotNull
// is null isNull
// or or
// not and
public void fun2() {
//1.获得session
Session session = HibernateUtils.openSession();
//2.控制事务
Transaction tx = session.beginTransaction();
//3.执行操作
//------------------------------------------
//创建criteria查询对象
Criteria criteria = session.createCriteria(Customer.class);
//添加查询语句
criteria.add(Restrictions.eq("cust_id", 1l));
//执行查询获得结果
Customer c = (Customer) criteria.uniqueResult();
System.out.println(c);
//------------------------------------------
//4.提交事务,关闭资源
tx.commit();
session.close();
}
分页查询
@Test
//分页查询
public void fun3() {
//1.获得session
Session session = HibernateUtils.openSession();
//2.控制事务
Transaction tx = session.beginTransaction();
//3.执行操作
//------------------------------------------
//查询所有customer对象
Criteria criteria = session.createCriteria(Customer.class);
criteria.setFirstResult(0);
criteria.setMaxResults(2);
List<Customer> list = criteria.list();
System.out.println(list);
//------------------------------------------
//4.提交事务,关闭资源
tx.commit();
session.close();
}
设置查询总记录数
@Test
//查询总记录数
public void fun4() {
//1.获得session
Session session = HibernateUtils.openSession();
//2.控制事务
Transaction tx = session.beginTransaction();
//3.执行操作
//------------------------------------------
//查询所有customer对象
Criteria criteria = session.createCriteria(Customer.class);
//设置查询的聚合函数 => 总行数
criteria.setProjection(Projections.rowCount());
//执行查询
Long count = (Long) criteria.uniqueResult();
System.out.println(count);
//------------------------------------------
//4.提交事务,关闭资源
tx.commit();
session.close();
}
原生SQL查询(复杂的业务查询)
基本查询:返回数组list
返回对象list
@Test
//基本查询
public void fun1() {
//1.获得session
Session session = HibernateUtils.openSession();
//2.控制事务
Transaction tx = session.beginTransaction();
//3.执行操作
//------------------------------------------
//1> 书写sql语句
String sql = "select * from cst_customer";
//2> 创建sql查询对象
SQLQuery query = session.createSQLQuery(sql);
//3> 调用方法查询结果
List<Object[]> list = query.list();
//query.uniqueResult();
for(Object[] objs : list) {
System.out.println(Arrays.toString(objs));
}
//------------------------------------------
//4.提交事务,关闭资源
tx.commit();
session.close();
}
@Test
//基本查询
public void fun2() {
//1.获得session
Session session = HibernateUtils.openSession();
//2.控制事务
Transaction tx = session.beginTransaction();
//3.执行操作
//------------------------------------------
//1> 书写sql语句
String sql = "select * from cst_customer";
//2> 创建sql查询对象
SQLQuery query = session.createSQLQuery(sql);
//3>指定将结果集封装到哪个对象中
query.addEntity(Customer.class);
//4> 调用方法查询结果
List<Customer> list = query.list();
//query.uniqueResult();
System.out.println(list);
//------------------------------------------
//4.提交事务,关闭资源
tx.commit();
session.close();
}
条件查询
@Test
//条件查询
public void fun3() {
//1.获得session
Session session = HibernateUtils.openSession();
//2.控制事务
Transaction tx = session.beginTransaction();
//3.执行操作
//------------------------------------------
//1> 书写sql语句
String sql = "select * from cst_customer where cust_id = ?";
//2> 创建sql查询对象
SQLQuery query = session.createSQLQuery(sql);
//3>指定将结果集封装到哪个对象中
query.setParameter(0, 1l);
query.addEntity(Customer.class);
//4> 调用方法查询结果
List<Customer> list = query.list();
//query.uniqueResult();
System.out.println(list);
//------------------------------------------
//4.提交事务,关闭资源
tx.commit();
session.close();
}
分页查询
@Test
//分页查询
public void fun4() {
//1.获得session
Session session = HibernateUtils.openSession();
//2.控制事务
Transaction tx = session.beginTransaction();
//3.执行操作
//------------------------------------------
//1> 书写sql语句
String sql = "select * from cst_customer limit ?,?";
//2> 创建sql查询对象
SQLQuery query = session.createSQLQuery(sql);
//设置参数
query.setParameter(0, 0);
query.setParameter(1, 3);
//3>指定将结果集封装到哪个对象中
query.addEntity(Customer.class);
//4> 调用方法查询结果
List<Customer> list = query.list();
//query.uniqueResult();
System.out.println(list);
//------------------------------------------
//4.提交事务,关闭资源
tx.commit();
session.close();
}
查询总记录数
注意: 数据强转
object转成long 先转换成String 再转化成Long
String countString = String.valueOf(countObject);
Long count = Long.valueOf(countString);
@Test
//查询总记录数
public void fun5() {
//1.获得session
Session session = HibernateUtils.openSession();
//2.控制事务
Transaction tx = session.beginTransaction();
//3.执行操作
//------------------------------------------
//1> 书写sql语句
String sql = "select count(*) from cst_customer ";
//2> 创建sql查询对象
SQLQuery query = session.createSQLQuery(sql);
//4> 调用方法查询结果
//List<Customer> list = query.list();
Object countObject = query.uniqueResult();
String countString = String.valueOf(countObject);
Long count = Long.valueOf(countString);
System.out.println(count);
//------------------------------------------
//4.提交事务,关闭资源
tx.commit();
session.close();
}