01.环境搭建

02.基本查询

1.方法说明

方法

说明

Restrictions.eq

=

Restrictions.allEq

利用Map来进行多个等于的限制

Restrictions.gt

>

Restrictions.ge

>=

Restrictions.lt

<

Restrictions.le

<=

Restrictions.between

BETWEEN

Restrictions.like

LIKE

Restrictions.in

in

Restrictions.and

and

Restrictions.or

or

Restrictions.sqlRestriction

用SQL限定查询

2,QBC常用限定方法

Restrictions.eq --> equal,等于.

Restrictions.allEq --> 参数为Map对象,使用key/value进行多个等于的比对,相当于多个Restrictions.eq的效果

Restrictions.gt --> great-than > 大于

Restrictions.ge --> great-equal >= 大于等于

Restrictions.lt --> less-than, < 小于

Restrictions.le --> less-equal <= 小于等于

Restrictions.between --> 对应SQL的between子句

Restrictions.like --> 对应SQL的LIKE子句

Restrictions.in --> 对应SQL的in子句

Restrictions.and --> and 关系

Restrictions.or --> or 关系

Restrictions.isNull --> 判断属性是否为空,为空则返回true

Restrictions.isNotNull --> 与isNull相反

Restrictions.sqlRestriction --> SQL限定的查询

Order.asc --> 根据传入的字段进行升序排序

Order.desc --> 根据传入的字段进行降序排序

MatchMode.EXACT --> 字符串精确匹配.相当于"like 'value'"

MatchMode.ANYWHERE --> 字符串在中间匹配.相当于"like '%value%'"

MatchMode.START --> 字符串在最前面的位置.相当于"like 'value%'"

MatchMode.END --> 字符串在最后面的位置.相当于"like '%value'"

01.基本操作

package com.gordon.test;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.junit.Test; import com.gordon.domain.Book;
import com.gordon.utils.HibernateUtil; /**
* QBC查询
* @author Administrator
*
*/
public class TestQBCDemo1 {
/**
* 基本查询
*/
@Test
public void run1() {
Session session = HibernateUtil.getCurrentSession();
Transaction transaction = session.beginTransaction(); // 穿件criteria查询接口
Criteria query = session.createCriteria(Book.class); query.addOrder(Order.asc("price"));
query.add(Restrictions.le("price", 40.00)); List<Book> list = query.list();
for (Book book : list) {
System.out.println(book.getName());
} transaction.commit();
}
}

02.分组查询

/**
* 分组查询
Hibernate:
select
this_.publisher_id as y0_,
count(*) as y1_,
sum(this_.price) as y2_
from
t_book this_
group by
this_.publisher_id
Hibernate:
select
publisher0_.id as id1_1_0_,
publisher0_.name as name2_1_0_
from
t_publisher publisher0_
where
publisher0_.id=?
出版社:电子工业出版社, 图书数量:3, 总价:155.0
Hibernate:
select
publisher0_.id as id1_1_0_,
publisher0_.name as name2_1_0_
from
t_publisher publisher0_
where
publisher0_.id=?
出版社:北京大学出版社, 图书数量:2, 总价:67.84
Hibernate:
select
publisher0_.id as id1_1_0_,
publisher0_.name as name2_1_0_
from
t_publisher publisher0_
where
publisher0_.id=?
出版社:人民邮电出版社, 图书数量:2, 总价:107.2
*/
@Test
public void run2() {
Session session = HibernateUtil.getCurrentSession();
Transaction transaction = session.beginTransaction(); // 穿件criteria查询接口
Criteria query = session.createCriteria(Book.class); ProjectionList pList = Projections.projectionList();
pList.add(Projections.groupProperty("publisher"));
pList.add(Projections.rowCount());
pList.add(Projections.sum("price")); query.setProjection(pList); Publisher publisher = null;
Long count = null;
Double sum = null;
List<Object[]> list = query.list();
for (Object[] obj : list) {
publisher = (Publisher) obj[0];
count = (Long) obj[1];
sum = (Double) obj[2]; System.out.println("出版社:" + publisher.getName() + ", 图书数量:" + count + ", 总价:" + sum);
} transaction.commit();
}

03.聚合函数

/**
* 聚合函数
Hibernate:
select
sum(this_.price) as y0_,
min(this_.price) as y1_,
max(this_.price) as y2_,
avg(this_.price) as y3_
from
t_book this_
[330.04, 31.0, 70.0, 47.14857142857143]
*/
@Test
public void run3() {
Session session = HibernateUtil.getCurrentSession();
Transaction transaction = session.beginTransaction(); Criteria criteria = session.createCriteria(Book.class); ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.sum("price"));
projectionList.add(Projections.min("price"));
projectionList.add(Projections.max("price"));
projectionList.add(Projections.avg("price")); criteria.setProjection(projectionList); List<Object[]> list = criteria.list();
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
} transaction.commit();
}

Hibernate- QBC-基本查询的更多相关文章

  1. Hibernate QBC 条件查询(Criteria Queries) and Demos

    目录 创建一个Criteria 实例 限制结果集内容 结果集排序 关联 动态关联抓取 查询示例 投影Projections聚合aggregation和分组grouping 离线detached查询和子 ...

  2. Hibernate之HQL查询

    一.Hibernate 提供了以下几种检索对象的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 OID 检索方式: 按照对象的 OID 来检索对象 HQL 检索方式:使用面向对象的 H ...

  3. Hibernate(九)HQL查询

    一.Hibernate提供的查询方式 OID查询方式:主键查询.通过get()或者load()方法加载指定OID的对象查询结果为一个 HQL查询方式:通过Query接口使用HQL语言进行查询 QBC查 ...

  4. 框架之 hibernate之各种查询

    1. Hibernate的查询方式 2. Hibernate的查询策略 案例:使用Hibernate完成查询所有联系人功能 需求分析 1. 完成所有的联系人的查询 技术分析之Hibernate框架的查 ...

  5. Hibernate框架的查询方式

    技术分析之Hibernate框架的查询方式        1. 唯一标识OID的检索方式        * session.get(对象.class,OID)    2. 对象的导航的方式       ...

  6. (补充)10.Hibernate框架的查询方式

    技术分析之Hibernate框架的查询方式 1. 唯一标识OID的检索方式 * session.get(对象.class,OID) 2. 对象的导航的方式 3. HQL的检索方式 * Hibernat ...

  7. Hibernate QBC 简单收集

    Hibernate QBC 介绍: QBC(Query By Criteria)通过 API 来检索对象 主要由 Criteria 接口.Criterion 接口和 Exception 类组成,支持在 ...

  8. hibernate框架之-查询结果集返回类型

    Hibernate支持HQL和SQL的查询,返回结果支持POJO类型或字段/数组的形式. 开发中用Hibernate进行数据库查询,用的是SQL.原来需要查询一个表的几乎所有字段,所以我使用了addE ...

  9. Hibernate原生SQL查询

    最近在做一个较为复杂的查询,hibernate基本的查询不能满足,只好使用其提供的原生sql查询.参考网上的一些资料,做一些总结. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行 ...

  10. hibernate的hql查询

    1.概念介绍 1.Query是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程,Query包装了一个HQL查询语句. 2.HQL是Hibernate Query Langua ...

随机推荐

  1. HOJ 1402 整数划分

    HOJ1402 整数划分 http://acm.hit.edu.cn/hoj/problem/view?id=1402 [题目描述] 整数划分是一个经典的问题.希望这道题会对你的组合数学的解题能力有所 ...

  2. MongoDB基本管理命令 [转]

    MongoDB基本管理命令 linux下配置安装mongodb 10分钟玩转mongoDB 官网安装教程 使用命令行方式连接mongodb: mongo /admin -u用户名 -p密码  --连接 ...

  3. TFS 切换登录用户的方法[转]

    来自:http://blog.csdn.net/tiangaojie123abc/article/details/12121929 方法一 用VS2010开发项目,一直困扰着我的是不知道怎么去切换TF ...

  4. java打包成window service服务[转]

    1 解释 java project  我说的是main方法作为程序入口的java工程,有别于 web project. 这样的工程 一般都是web project的附属扫描程序或一些独立的执行程序,如 ...

  5. 关于ftpshell脚本中mget中去除多余交互式提示的方法

    默认情况下ftp里面的交互式提示是开启的,平常如果下载多个文件时,这种提示很让人烦,如果是在shell脚本里面要从ftp服务器上一次mget多个文件,写个交互式很麻烦,最好是把这个交互式提示关掉. 进 ...

  6. OAF_OAF增删改-修改的实现(案例)

    2014-06-02 Created By BaoXinjian

  7. 多进程对 MySQL update的影响

    今天要做数据清洗的时候,要更新一个数据库字段,考虑到用多进程去更新数据库,也许程序会跑得快一些,结果开了64个进程, 结果是其他程序更新的时候,速度非常慢,最后发现的原因是,数据库中有64个SQL语句 ...

  8. ThreadLocal 类说明

    1 ThreadLocal 不是一个线程,而是保存线程本地化对象的容器.当运行于多线程环境的某个对象使用 ThreadLocal 维护变量时,ThreadLocal 为每一个使用该变量的线程分配一个独 ...

  9. C++防止头文件反复包括

    两种方法: (1)#pragma once. (2)ifndef/define/endif 差别: (1)#pragma once是编译器相关的.有的编译器支持,有的编译器不支持: (2)#ifnde ...

  10. TCP数据流

    1. 引言 如果按照分组数量计算,约有一半的TCP报文段包含成块数据(如FTP.电子邮件等),另一半则包含交互数据(如telnet和rlogin).如果按照字节计算,则成块数据与交互数据的比例约为90 ...