一. 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();
}
}