栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

hibernate5.2之后createCriteria过时问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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;


public class HIbernateDemo2 {

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

2、排序查询
@Test

public void testQBCOrderQuery() {
	Session session = HibernateUtils.getCurrentSession();
	Transaction tx = session.beginTransaction();
	
	CriteriaBuilder builder = session.getCriteriaBuilder();
       // 参数为查询的结果类型
	CriteriaQuery criteria = builder.createQuery(Customer.class);
       // 从什么表查询
	Root root = criteria.from(Customer.class);
	
       //添加各种条件, 就是sql select 之后的语句 
	criteria.orderBy(builder.desc(root.get("cust_name")), builder.asc(root.get("cust_id")));
       
	// 使用query 实现查询
	Query query = session.createQuery(criteria);
       // 结果集
	List list = query.getResultList();
	for (Customer customer : list) {
		System.out.println("customer = " + customer);
	}
	
	tx.commit();
}
3、分页查询
@Test
	
	public void testQBCPaginationQuery() {
		Session session = HibernateUtils.getCurrentSession();
		Transaction tx = session.beginTransaction();
		
		CriteriaBuilder builder = session.getCriteriaBuilder();
	    // 参数为查询的结果类型
		CriteriaQuery criteria = builder.createQuery(Customer.class);
	    // 从什么表查询
		Root 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 list = session.createQuery(criteria).setFirstResult(pageIndex).setMaxResults(pageSize).list();
	    
		for (Customer customer : list) {
			System.out.println("customer = " + customer);
		}
		
		tx.commit();
	}
4、条件查询
@Test
	
	public void testQBCConditionQuery() {
		Session session = HibernateUtils.getCurrentSession();
		Transaction tx = session.beginTransaction();
		
		CriteriaBuilder builder = session.getCriteriaBuilder();
        // 参数为查询的结果类型
		CriteriaQuery criteria = builder.createQuery(Customer.class);
        // 从什么表查询
		Root root = criteria.from(Customer.class);
		
        //添加各种条件, 就是sql select 之后的语句 
		criteria.select(root).where(builder.like(root.get("cust_name"), "%天%"));
        
		// 使用query 实现查询
		Query query = session.createQuery(criteria);
        // 结果集
		List list = query.getResultList();
		for (Customer customer : list) {
			System.out.println("customer = " + customer);
		}

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

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 list = criteria.list();
	for (Customer customer : list) {
		System.out.println("customer = " + customer);
	}

	tx.commit();
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/711223.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号