查询数据根据面向对象的方式进行操作,查询条件通过三个辅助类实现;
1.Criteria:代表执行一次查询
2.Criterion:代表一个查询条件
3.Restrictions:产生查询条件使用的工具类
查询功能的实现 步骤?
1. 使用Hibernate创建session对象
2.使用session对象创建Criteria对象
3.使用Restrictions方法创造查询体条件
.......
.....
4.执行Criteria中list方法/或者是uniquerResult()返回结果集方法
案例如何实现:
QBC 实现分页:......
补充说明:QBC查询方式
1.根据查询参数+指定参数的类型
2.使用jion实现联合查询
package com.zgq.dao;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;
import com.zgq.enity.Sclass;
import com.zgq.enity.Studentinfo;
import com.zgq.util.HibernateSessionFactory;
public class CriteriaImpl {
/**
*
* @Description: Criteria查询
* @Author: 邹国庆(作者)
* @Create: 2019年11月12日 下午2:33:47
* @Parameters:
*/
@Test
public void CriteriaQuery1(){
Session session = HibernateSessionFactory.getSession();
Criteria criteria = session.createCriteria(Studentinfo.class);
List<Studentinfo> list = criteria.list();
for (Studentinfo studentinfo : list) {
System.out.println(studentinfo.toString());
}
}
/**
*
* @Description: Criteria条件查询
* @Author: 邹国庆(作者)
* @Create: 2019年11月12日 下午2:34:19
* @Parameters:
*/
@Test
public void CriteriaQuery2(){
Session session = HibernateSessionFactory.getSession();
Criteria criteria = session.createCriteria(Studentinfo.class);
//criteria.add(Restrictions.eq("stuName", "花木兰"));
criteria.add(Restrictions.like("stuName", "花%"));
List<Studentinfo> list = criteria.list();
for (Studentinfo studentinfo : list) {
System.out.println(studentinfo.toString());
}
}
/**
*
* @Description: Criteria根据对象查询
* @Author: 邹国庆(作者)
* @Create: 2019年11月12日 下午2:35:06
* @Parameters:
*/
@Test
public void CriteriaQuery3(){
Studentinfo stu = new Studentinfo();
stu.setStuSex("女");
Session session = HibernateSessionFactory.getSession();
Criteria criteria = session.createCriteria(Studentinfo.class);
criteria.add(Example.create(stu));
List<Studentinfo> list = criteria.list();
for (Studentinfo studentinfo : list) {
System.out.println(studentinfo.toString());
}
}
@Test
public void CriteriaQuery4(){
Session session = HibernateSessionFactory.getSession();
Criteria criteria = session.createCriteria(Studentinfo.class);
//设置函数
criteria.setProjection(
Projections.projectionList()
.add(Projections.groupProperty("stuSex"))
.add(Projections.rowCount())
.add(Projections.max("stuAge"))
.add(Projections.avg("stuAge"))
);
List<Object> list = criteria.list();
for (Object object : list) {
System.out.println(object.toString());
}
}
@Test
public void getDeptbyCreatia5(){
Session session = HibernateSessionFactory.getSession();
//创建查询 QBC语句
Criteria criteria = session.createCriteria(Userinfo.class);
//定义参数集合
Object[] objVal={"小白2","M"};
Type[] typeVal={StandardBasicTypes.STRING,StandardBasicTypes.STRING};
//给语句绑定参数
criteria.add(Restrictions.sqlRestriction("name=? and sex=?", objVal, typeVal));
//排序操作
criteria.addOrder(Order.desc("id"));
//执行查询列表
List<Userinfo> list = criteria.list();
for (Userinfo userinfo : list) {
System.out.println(userinfo.toString());
}
}
/*使用jion实现联合查询*/
@Test
public void getDeptbyCreatia6(){
Session session = HibernateSessionFactory.getSession();
//创建查询 QBC语句
Criteria criteria = session.createCriteria(Empinfo.class);
//关联对象
criteria.createAlias("deptinfo", "d");
//添加条件
criteria.add(Restrictions.ilike("d.deptName", "财务%"));
//分页条件
criteria.setFirstResult(1);
criteria.setMaxResults(10);
//查询 遍历结果
List<Empinfo> list = criteria.list();
for (Empinfo empinfo : list) {
System.out.println("==="+empinfo.toString());
System.out.println(empinfo.getDeptinfo().toString());
}
}
}