hibernate5.2之后createCriteria过时问题

看源码知道从hibernate5.2开始就已经不推荐使用这种方式了:
在这里插入图片描述
在这里插入图片描述

1、简单查询

package com.fengya.hibernate.demo1;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query;//这是要注意一下的!
import org.junit.Test;

import com.fengya.hibernate.domain.Customer;
import com.fengya.hibernate.utils.HibernateUtils;

/**
 *	QBC简单查询
 */
public class HIbernateDemo2 {

	@Test
	/**
	 * QBC简单查询
	 */
	public void testQBCQuery() {
		Session session = HibernateUtils.getCurrentSession();
		Transaction tx = session.beginTransaction();
		
		//获得Criteria的对象
//		session.createCriteria(Customer.class);//已经过时
		// 获得CriteriaBuilder 用来创建CriteriaQuery
		CriteriaBuilder builder = session.getCriteriaBuilder();
		// 创建CriteriaQuery 参数为返回结果类型
		CriteriaQuery<Customer> criteria = builder.createQuery(Customer.class);
		// 返会查询表 参数类型为要查询的持久类
		Root<Customer> root = criteria.from(Customer.class);
		// 设置where条件
		criteria.where(builder.equal(root.get("cust_id"), 5L));
		// 创建query 查询
		Query<Customer> query = session.createQuery(criteria);
		// 返回结果
		Customer customer = query.getSingleResult();
		System.out.println(customer);
		
		tx.commit();
	}
}

在这里插入图片描述

2、排序查询

@Test
/**
 * QBC排序查询
 */
public void testQBCOrderQuery() {
	Session session = HibernateUtils.getCurrentSession();
	Transaction tx = session.beginTransaction();
	
	CriteriaBuilder builder = session.getCriteriaBuilder();
       // 参数为查询的结果类型
	CriteriaQuery<Customer> criteria = builder.createQuery(Customer.class);
       // 从什么表查询
	Root<Customer> root = criteria.from(Customer.class);
	
       //添加各种条件, 就是sql select 之后的语句 
	criteria.orderBy(builder.desc(root.get("cust_name")), builder.asc(root.get("cust_id")));
       
	// 使用query 实现查询
	Query<Customer> query = session.createQuery(criteria);
       // 结果集
	List<Customer> list = query.getResultList();
	for (Customer customer : list) {
		System.out.println("customer = " + customer);
	}
	
	tx.commit();
}

3、分页查询

@Test
	/**
	 * QBC分页查询
	 */
	public void testQBCPaginationQuery() {
		Session session = HibernateUtils.getCurrentSession();
		Transaction tx = session.beginTransaction();
		
		CriteriaBuilder builder = session.getCriteriaBuilder();
	    // 参数为查询的结果类型
		CriteriaQuery<Customer> criteria = builder.createQuery(Customer.class);
	    // 从什么表查询
		Root<Customer> root = criteria.from(Customer.class);
		
	    //添加各种条件, 就是sql select 之后的语句 
		criteria.orderBy(builder.desc(root.get("cust_name")));
		
		//设置分页
		int pageSize = 3;
		int currentPage = 1;
		int pageIndex = (currentPage - 1) * pageSize;
	    
		// 使用query 实现查询// 结果集
		List<Customer> list = session.createQuery(criteria).setFirstResult(pageIndex).setMaxResults(pageSize).list();
	    
		for (Customer customer : list) {
			System.out.println("customer = " + customer);
		}
		
		tx.commit();
	}

4、条件查询

@Test
	/**
	 * QBC条件查询
	 */
	public void testQBCConditionQuery() {
		Session session = HibernateUtils.getCurrentSession();
		Transaction tx = session.beginTransaction();
		
		CriteriaBuilder builder = session.getCriteriaBuilder();
        // 参数为查询的结果类型
		CriteriaQuery<Customer> criteria = builder.createQuery(Customer.class);
        // 从什么表查询
		Root<Customer> root = criteria.from(Customer.class);
		
        //添加各种条件, 就是sql select 之后的语句 
		criteria.select(root).where(builder.like(root.<String>get("cust_name"), "%天%"));
        
		// 使用query 实现查询
		Query<Customer> query = session.createQuery(criteria);
        // 结果集
		List<Customer> list = query.getResultList();
		for (Customer customer : list) {
			System.out.println("customer = " + customer);
		}

		tx.commit();
	}

5、统计查询

@Test
	/**
	 * QBC统计查询
	 */
	public void testQBCStatisticsQuery() {
		Session session = HibernateUtils.getCurrentSession();
		Transaction tx = session.beginTransaction();
		
		CriteriaBuilder builder = session.getCriteriaBuilder();
		// 参数为查询的结果类型
		CriteriaQuery<Long> criteria = builder.createQuery(Long.class);
		// 从什么表查询
		Root<Customer> root = criteria.from(Customer.class);
		// 就是sql select 之后的语句 
		criteria.select(builder.count(root));
		// 使用query 实现查询
		Query<Long> query = session.createQuery(criteria);
		// 结果集
		Long result = query.uniqueResult();
		System.out.println("result = " + result);
		
		tx.commit();
	}

6、离线条件查询

@Test
/**
 * QBC离线条件查询
 */
public void testQBCOutlineConditionQuery() {
	Session session = HibernateUtils.getCurrentSession();
	Transaction tx = session.beginTransaction();
	
	DetachedCriteria dc = DetachedCriteria.forClass(Customer.class);//可能不在DAO中做,在web层可能就做过了这个工作,web层可以传	dc
	dc.add(Restrictions.like("cust_name", "春%"));					//不需要封装两次条件,尤其是做分页的时候,也可以传递	 dc
	
	Criteria criteria = dc.getExecutableCriteria(session);
	List<Customer> list = criteria.list();
	for (Customer customer : list) {
		System.out.println("customer = " + customer);
	}

	tx.commit();
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值