什么是QBc:
QBC(Query By Criteria)按条件查询,通过Criteria构造查询条件,即通过调用Criteria的api实现各种查询。
通过Criteria对象拼装 查询条件,调用Criteria的add方法拼接查询条件,最终hibernate通过criteria对象自动生成sql语句。
QBC检索步骤:
1.调用Session的createCriteria()方法创建一个Criteria对象。
2.设定查询条件。Restrictions类提供了一系列用于设定查询条件的静态方法,
这些静态方法都返回Criterion实例,每个Criterion实例代表一个查询条件。
Criteria的add()方法用于加入查询条件。
3.调用Criteria的list()方法执行查询语句。该方法返回List类型的查询结果,在
List集合中存放了符合查询条件的持久化对象
入门程序:
//查询实体对象
@Test
public void test1() {
//创建session
Session session = HibernateUtil.openSession();
//创建criteria对象
//指定实体类型,即pojo类,这里pojo是hibernate.cfg.xml加载映射文件对应的类
Criteria criteria = session.createCriteria(CstCustomer.class);
//通过criteria对象查询拼接条件
//参数:第一个参数:实体类型中的属性
//criteria.add(Restrictions.eq("custName", "兔斯基"));
criteria.add(Restrictions.like("custName", "%兔%"));
//查询所有的数据,由于上边创建criteria时指定实体CstCustomer,去查询CstCustomer对应的表cst_customer
List list = criteria.list();
//System.out.println(list);
}
数据库表cst_customer如下:
测试后在console里查看打印出来的日志:
执行查询后list里的内容:
分页查询
//分页查询数据列表
@Test
public void test2() {
//创建session
Session session = HibernateUtil.openSession();
//创建criteria对象
//指定实体类型,即pojo类,这里pojo是hibernate.cfg.xml加载映射文件对应的类
Criteria criteria = session.createCriteria(CstCustomer.class);
//当前页码
int page = 1;
//每页显示记录数
int maxResults = 2;
//求出起始记录的下标
int firstResult = (page-1)*maxResults;
//设置起始记录的下标
criteria.setFirstResult(firstResult);
//设置每页查询的记录数
criteria.setMaxResults(maxResults);
List list = criteria.list();
System.out.println(list);
}
记录总数查询
public void test4(){
//创建session
Session session = HibernateUtil.openSession();
//创建criteria对象
//指定实体类型,即pojo的类型,这里pojo是hibernate.cfg.xml加载映射文件对应的类型
Criteria criteria = session.createCriteria(CstCustomer.class);
criteria.add(Restrictions.like("custName", "%兔%"));
//基于投影查询,设置rowCount,自动生成select count(*)
criteria.setProjection(Projections.rowCount());
Long total = (Long) criteria.uniqueResult();
System.out.println(total);
}
投影查询
public void test3(){
//创建session
Session session = HibernateUtil.openSession();
//创建criteria对象
//指定实体类型,即pojo的类型,这里pojo是hibernate.cfg.xml加载映射文件对应的类型
Criteria criteria = session.createCriteria(CstCustomer.class);
//设置投影列
//property中指定实体中的属性名
//criteria.setProjection(Projections.property("custName"));
//通过Projections.projectionList().add添加多个投影列
criteria.setProjection(
Projections.projectionList()
.add(Projections.property("custId").as("custId"))
.add(Projections.property("custName").as("custName"))
);
//将投影查询结果object[]数组转成pojo对象
//结果集封装策略
criteria.setResultTransformer(new AliasToBeanResultTransformer(CstCustomer.class));
List list = criteria.list();
System.out.println(list);
}
QBC自定义条件:
(截图来自传智课件):