QBC CriteriaQuery用法

导读:本篇文章讲解 QBC CriteriaQuery用法,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Criteria查询(Criteria Query),这种查询方式把查询条件封装为一个Criteria对象。在实际应用中,使用Session的createCriteria()方法构建一个org.hibernate.Criteria实例,然后把具体的查询条件通过Criteria的add()方法加入到Criteria实例中。这样,程序员可以不使用SQL甚至HQL的情况下进行数据查询。
以下以两个实体类User、Department为例:

User:
 

import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Email;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;


@JsonIgnoreProperties({"dpt"})
public class User {
	private int id;
	@NotEmpty
	private String name;
	@Min(value =1) 
	@Max(value =200) 
	private int age;
	@NotEmpty
	private String pwd;
	@Past
	private Date birthday;
	@NotNull
	private Department dpt;
	@DecimalMin(value = "1")
	@DecimalMax(value = "3")
	private Double height;
	@Email
	private String email;
setter............. getter...........
}

Department:
 

import java.util.HashSet;
import java.util.Set;

public class Department {
	private int id;
	private String name;
	private Set<User> users = new HashSet<User>();
setter......  getter........
}
  1. 带条件式用法:
    public List<User> selectUserold(int gt, int lt, int dep_id) {
    		//1、创建builder
    		CriteriaBuilder builder=getSession().getCriteriaBuilder();
    		//2、拿到criteriaQuery	
    		CriteriaQuery<User> criteriaQuery=builder.createQuery(User.class);
    		//3、获取到根对像,构建查询条件
    		Root<User> root=criteriaQuery.from(User.class);
    		Predicate predicate1= (Predicate) builder.gt(root.get("id"), gt);
    		Predicate predicate2= (Predicate) builder.lt(root.get("id"), lt);
    		Predicate predicate3= (Predicate) builder.equal(root.get("dpt"),dep_id);
    		Predicate predicate=builder.and(predicate1,predicate2,predicate3);
    		
    		/* 设置要获取数据的字段 */
    		criteriaQuery.select(root.get("name"));
    		
    		/* 设置条件 */
    		criteriaQuery.where(predicate);
    		
    		//4、获取query对象
    		Query<User> query=getSession().createQuery(criteriaQuery);
    		
    		//5、执行查询
    		List<User> users=query.list();
    		return users;
    	}

  2. 获取指定字段数据:
     
	
/* CriteriaQuery根据条件查询多个字段的值 */
	public List<User> selectUser(int gt, int lt, int dep_id) {
		//1、创建builder
		CriteriaBuilder builder = getSession().getCriteriaBuilder();
		//2、拿到criteriaQuery
		CriteriaQuery<Tuple> criteria = builder.createTupleQuery();
		//3、获取到根对像,构建查询条件
		Root<User> root = criteria.from(User.class);
		
		Predicate predicate1= (Predicate) builder.gt(root.get("id"), gt);
		Predicate predicate2= (Predicate) builder.lt(root.get("id"), lt);
		Predicate predicate3= (Predicate) builder.equal(root.get("dpt"),dep_id);
		Predicate predicate=builder.and(predicate1,predicate2,predicate3);
		
		/* 设置条件 */
		criteria.where(predicate);
		
		/* 设置要获取值的字段 */
		Path<Integer> qId = root.get("id");
		Path<String> qname = root.get("name");
		
		criteria.multiselect(qId,qname);
		
		/* 获取到的结果 */
		List<Tuple> tuples = getSession().createQuery(criteria).getResultList();
		for (Tuple tuple : tuples)
		{
		   int id = tuple.get(qId);
		   String name = tuple.get(qname);
		   System.out.println(id+":"+name);
		}
		return null;
	}

需导入的包:

import javax.persistence.Tuple;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.JoinType;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71211.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!