Hibernate 中使用的查询方式——QBC查询方式

查询数据根据面向对象的方式进行操作,查询条件通过三个辅助类实现;

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值