java中使用QBC的好处_Criteria(QBC)
[TOC]
# QBC(query by criteria)
QBC(query by criteria),它是一种更加面向对象的检索方式。
org.hibernate.criterion.Criterion是Hibernate提供的一个面向对象查询条件接口.一个单独查询就是Criterion接口的一个实例,用于限制Criteria对象的查询,在Hibernate中Criterion对象的创建通常是通过Restrictions工厂类完成的
具体如下:
1. 获得 Hibernate的 Session对象。
2. 通过 Session获得 Criteria对象。
3. 使用 Restrictions的静态方法创建 Criterion条件对象。 Restrictions类中提供了一系列用于
设定查询条件的静态方法,这些静态方法都返回 Criterion实例,每个 Criterion实例代表
个查询条件。
4. 向 Criteria对象中添加 Criterion查询条件。 Criteria的add()方法用于加入查询条件
5. 执行 Criteria的list()或uniqueresult()获得结果
Criteria接口与Query接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是Criteria接口也是轻量级的,它不能在Session之外使用。
## 基本检索
~~~
//1. 得到一个Criteria对象
Criteria criteria = session.createCriteria(Goods.class);
//2. 调用list方法
List list = criteria.list();
System.out.println(list);
~~~
## 排序检索
**注意在criteri.addOrder()方法的参数使用的Order是hibernate中的对象**
~~~
//得到一个Criteria对象
Criteria criteria = session.createCriteria(Goods.class);
//指定排序
criteria.addOrder(org.hibernate.criterion.Order.asc("money")); //asc升序, desc降序
//调用list方法
List list = criteria.list();
System.out.println(list);
~~~
## 条件检索
~~~
hql语句中,不能出现任何数据库相关的信息
> gt
>= ge
< lt
<= le
== eq
!= ne
in in
between and between
like like
is not null isNotNull
is null isNull
or or
and and
~~~
~~~
//查询名称叫 手机的 商品
Criteria criteria = session.createCriteria(Goods.class);
//其他条件 lt , le <=, ge >=, eq ==
Criterion like = Restrictions.like("name", "手机_");
//添加条件
criteria.add(like);
Goods c = (Goods) criteria.uniqueResult();
System.out.println(c);
//查询价格在1050以上,并且名称叫 手机的 商品
Criteria cri = session.createCriteria(Goods.class);
// >1050
SimpleExpression lt = Restrictions.gt("money", 1050d);
SimpleExpression eq = Restrictions.eq("c", c);
LogicalExpression and = Restrictions.and(lt, eq);
cri.add(and);
//List list = cri.add(Restrictions.and(
// Restrictions.gt("money", 1050d),
// Restrictions.eq("c", c)
//)).list();
~~~
## 分页检索
~~~
Criteria criteria = session.createCriteria(Goods.class);
criteria.setFirstResult((2 - 1) * 6);
criteria.setMaxResults(6);
List list = criteria.list();
System.out.println(list);
~~~
## 统计分组检索
`Count sum avg max min`
~~~
//1. 统计订单总数
Criteria criteria = session.createCriteria(Goods.class);
//Object obj = criteria.setProjection(Projections.rowCount()).uniqueResult();
//统计总行数 count(id)
//System.out.println(obj);
//2. 订单的总价格---分组统计根据客户
//criteria.setProjection(Projections.sum("money")); //统计总金额
criteria.setProjection(
Projections.projectionList().add(
Projections.sum("money"))
.add(Projections.groupProperty("c")
)
);
//这个集合保存的是Object[money的统计信息,客户信息]
List list = criteria.list();
~~~
## 离线条件检索
在多条件查询的时候,需要在Web层封装相应的参数到Criteria,
而在Dao层才真正的去执行查询数据库的操作,
所以需要在Web层创建Criteria并将其传递到Dao层,
这个时候就不能在Web层使用session.createCriteria来创建Criteria,
因为Criteria的一般创建都是使用session.createCriteria(),
而session都是在Dao层才会创建的
~~~
//1. 得到DetachedCriteria
DetachedCriteria dc = DetachedCriteria.forClass(Goods.class);
dc.add(Restrictions.like("name", "手机_"));
//2. 生成Criteria执行操作
Session session = HibernateUtils.openSession();
Criteria criteria = dc.getExecutableCriteria(session);
List list = criteria.list();
System.out.println(list);
~~~
java中使用QBC的好处_Criteria(QBC)相关推荐
- Java中引入泛型的好处
泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数.这种类型参数可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. 在没有泛型的情况下,通过对类型Object的引用来实现参数 ...
- java中的枚举_Java中的枚举
java中的枚举 Enum was introduced in Java 1.5 as a new type whose fields consists of a fixed set of const ...
- java中的规范是什么意思_Java中的异常规范有什么好处?
我从C来到Java. 在Java和C中,我们都可以指定异常.看起来像这样: void function_name() throw(Exception) { ... if (error) { throw ...
- java final 变量 好处_深入理解Java中的final关键字
Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...
- java如果把字符串转成对象_为什么Java中的字符串对象是不可变的,有什么好处?...
专注于Java领域优质技术号,欢迎关注 原创: 阿杜的世界 阅读本文大概需要 4分钟. 所谓不可变对象,是指一个对象在创建后,它的内部状态不会被改变的对象.这意味着当我们将一个不可变对象的引用赋值给某 ...
- Java中JVM的xmx和xms配置成一样的好处
Java中JVM的-Xmx和-Xms配置成一样有什么好处 文章目录 Java中JVM的-Xmx和-Xms配置成一样有什么好处 一.`-Xmx`和`-Xms` 二.设置`-Xmx` 的注意点 三.-Xm ...
- java中封装的好处_编程中封装的作用/优点
最近学习了Java三大特性中的封装,所以在这里总结一下自己堆封装的理解和简介,给大家做出参考. 什么是封装(Encapsulation): 封装(Encapsulation)是面向对象方法的重要原则, ...
- [转]JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对应的数据库表的实体类.Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操 ...
- Java中数据存储方式
2019独角兽企业重金招聘Python工程师标准>>> 1. 寄存器(register).这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有限, ...
最新文章
- c的按位取反运算符(~) 与逻辑逻辑(!)
- Response 输出文件流过程中的等待效果
- 网站停办了 服务器有备份吗,网站在服务器上四种备份方法
- live meeting中白板无法正常使用
- mvn如何编译源码命令_java – 如何使用maven编译单个文件?
- form表单上传文件
- mysql cmake ncursor_在移植的过程中主要会用到boost库、cmake工具以及wt库的编译。...
- Python数据分析pandas入门练习题(七)
- 前端自检梳理——Vue.js项目实战开发
- (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
- python tkinter画福字
- Mac 安装minikube Error: No available formula with the name “minikube“
- 《笔记——机器学习与物理模型》by鄂维南院士讲座
- 百度朱光:将技术基因注入百度金融,是我们未来三五年要做的事
- Edge导航网址变成了毒霸的,如何改动?
- 量产技术-把kingston U盘做成USB-CDROM启动盘
- vue用路由守卫进行登录后的路由跳转
- SARscape下雷达图像一般处理与应用
- keras入门实例:非线性拟合求拟合系数
- 3D模型欣赏:超写实的性感金发美女3D角色 整体动作造型塑造自然协调【3D游戏建模教程】