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;@NotEmptyprivate String name;@Min(value =1) @Max(value =200) private int age;@NotEmptyprivate String pwd;@Pastprivate Date birthday;@NotNullprivate Department dpt;@DecimalMin(value = "1")@DecimalMax(value = "3")private Double height;@Emailprivate 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、创建builderCriteriaBuilder 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、创建builderCriteriaBuilder builder = getSession().getCriteriaBuilder();//2、拿到criteriaQueryCriteriaQuery<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;

QBC CriteriaQuery用法相关推荐

  1. 微信扫一扫调用失败解决方案

    现实项目中业务需要开发微信公众号,业务场景其中有需求要使用微信扫一扫,奇怪的问题产生了,第一次进入页面的时候调用成功没有问题,当做别的操作之后,在点击调用微信扫一扫 发现无路如何都调用不起来了. 微信 ...

  2. 企业微信消息推送接口大全

    该类存放接口所用到的企业微信的接口地址 package com.common;public final class QyapiUrl {/*** 请求nginx转发服务器地址*/public stat ...

  3. Hibernate中createCriteria即QBC查询的详细用法 .Hibernate中createCriteria即QBC查询的详细用法 ....

    现在假设有一个Student类,内有id,name,age属性 String hql = "from Student s"; 按照以前的做法,我们通常是 Query query = ...

  4. Restrictions查询用法

    Restrictions查询用法 HQL运算符 QBC运算符 含义 = Restrictions.eq() 等于equal <>  Restrictions.ne() 不等于not equ ...

  5. 【Java中级】8.5 SSH之Hibernate框架(五)——关于Criteria(QBC)过时的补充

    1.0 5.2版本之后过时 Criteria类涉及Hibernate中QBC查询语句的使用. 以下内容是官方API文档关于Criteria方面的中文翻译. 详细参考文章:Hibernate5.2之后Q ...

  6. Specification 参数的用法

    ----in用法 @Overridepublic List<Person> findAll(List<String> allCode) {List<Person> ...

  7. createCriteria用法

    Session session=  this.getSession();   List list=session.createCriteria(MeterUser.class).add(Restric ...

  8. createCriteria的用法

    createCriteria的用法 现在假设有一个Student类,内有id,name,age属性 String hql = "from Student s" ; 按照以前的做法, ...

  9. 【hibernate框架】面向对象的查询语法(QBE和QBC)

    QBC和QBE QBC:(Query By Criteria) Criteria是Criterion的复数,是"标准.准则.约束"的意思. 用法: @Test public voi ...

最新文章

  1. 使用Servlet完成单表的CRUD
  2. php和python区别-Python与PHP的一些区别
  3. HDU2085:核反应堆(递推)
  4. 图解SQL Server 安全函数的使用
  5. java实例域静态域_有关java 实例域 静态域 静态方法
  6. C语言编写一个备份文件,2014年3月二级C语言上机题库备份.doc
  7. c 多文件全局变量_C语言开发单片机为什么大多数都采用全局变量的形式?
  8. oracle 查询cpu 100%,Oracle 11g中查询CPU占有率高的SQL
  9. Vhost and VIOMMU
  10. 面试官,你为什么老是问我”闭包“
  11. RPM中SPEC宏定义对应路径
  12. UVA - 10635 —— Prince and Princess
  13. 最新回归算法理解、实现及应用(2)logistic回归
  14. Linux之执行一个可执行文件
  15. 【亲自实践能够下载的谷歌地图切片url地址】谷歌地图数据下载的尝试以及Python爬虫实现
  16. 如何提升团队凝聚力,打造高绩效团队?
  17. mysql修改字段的名称类型_MySQL修改字段名和字段数据类型
  18. area 估算函数(simpson)
  19. 联想rd650怎么装系统win7_ThinkServer - RD650 - RAID及系统安装 - 图文
  20. 医院PACS系统源码

热门文章

  1. 手机聊天室的设计与实现
  2. 【研究生】毕业答辩PPT制作和讲述要点(整理)
  3. Flutter 非空安全包构建(dart>=2.12)
  4. AcFunBiliBili竞品分析
  5. Hotel booking酒店预订——数据分析与建模
  6. 文本分类学习 (五) 机器学习SVM的前奏-特征提取(卡方检验续集)
  7. Wannafly挑战赛22:B. 字符路径
  8. 中兴oltc320用户手册_中兴C320C300 V2版本OLT开局配置手册.doc
  9. 计算身体质量指数BMI(python版)
  10. CleanMyMac最新版本下载体验心得及使用感受评价