一、QBC的查询方式

  使用QBC不在需要写hql语句,而是使用criteria对象的各种方法来实现。

1、查询所有

    //使用QBC方式查询所有
@Test
public void test11(){
SessionFactory sessionFactory = null;
Session session =null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1、创建criteria对象,指定要查询的实体类的名称
Criteria criteria = session.createCriteria(Good.class);
//2、调用方法得到数据
List<Good> list = criteria.list();
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
}finally{
session.close();
sessionFactory.close();
}
}

2、条件查询

  (1)准确查询

// 使用QBC方式查询名称为苹果,并且描述为苹果的记录
@Test
public void test12() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、创建criteria对象,指定要查询的实体类的名称
Criteria criteria = session.createCriteria(Good.class);
/**
* 使用方法设置查询条件
* 使用criteria的add方法添加条件
* 使用Restrictios的静态方法设置条件
*/
criteria.add(Restrictions.eq("gname", "苹果"));
criteria.add(Restrictions.eq("gmono", "苹果"));
// 2、调用方法得到数据
List<Good> list = criteria.list();
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}

  (2)模糊查询

// 使用QBC方式查询名称中有苹字的记录
@Test
public void test13() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、创建criteria对象,指定要查询的实体类的名称
Criteria criteria = session.createCriteria(Good.class);
/**
* 使用方法设置查询条件 使用criteria的add方法添加条件 使用Restrictios的静态方法设置条件
*/
criteria.add(Restrictions.like("gname", "%苹%"));
// 2、调用方法得到数据
List<Good> list = criteria.list();
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}

3、排序查询

  (1)正序查询

// 使用QBC方式查询以id的升序来查询 数据
@Test
public void test14() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、创建criteria对象,指定要查询的实体类的名称
Criteria criteria = session.createCriteria(Good.class);
/**
* 使用方法设置查询条件
* 使用criteria的addOrder方法添加排序
* 使用Order的静态方法设置排属性
*/
criteria.addOrder(Order.asc("gid"));
// 2、调用方法得到数据
List<Good> list = criteria.list();
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}

  (2)将序查询:

  

// 使用QBC方式查询以id的将序来查询 数据
@Test
public void test15() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、创建criteria对象,指定要查询的实体类的名称
Criteria criteria = session.createCriteria(Good.class);
/**
* 使用方法设置查询条件
* 使用criteria的addOrder方法添加排序
* 使用Order的静态方法设置排属性
*/
criteria.addOrder(Order.desc("gid"));
// 2、调用方法得到数据
List<Good> list = criteria.list();
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}

4、分页查询

// 使用QBC方式每次查询5条数据
@Test
public void test16() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、创建criteria对象,指定要查询的实体类的名称
Criteria criteria = session.createCriteria(Good.class);
//设置第一个要查询记录的位置
criteria.setFirstResult(0);
//2、设置每页最大的记录是
criteria.setMaxResults(5);
// 2、调用方法得到数据
List<Good> list = criteria.list();
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}

5、统计查询

// 使用QBC方式查询记录数
@Test
public void test17() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、创建criteria对象,指定要查询的实体类的名称
Criteria criteria = session.createCriteria(Good.class);
criteria.setProjection(Projections.rowCount());
// 2、调用方法得到数据
Object object = criteria.uniqueResult();
Long long1 = (Long) object;
int count = long1.intValue();
System.out.println(count);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}

6、离线查询

// 使用QBC方式离线查询
@Test
public void test18() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、创建DetachedCriteria对象,指定要查询的实体类的名称
DetachedCriteria cDetachedCriteria = DetachedCriteria.forClass(Good.class);
//2、得到criteria对象(最终执行时才用到session)
Criteria criteria = cDetachedCriteria.getExecutableCriteria(session);
criteria.setProjection(Projections.rowCount());
// 3、调用方法得到数据
Object object = criteria.uniqueResult();
Long long1 = (Long) object;
int count = long1.intValue();
System.out.println(count);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}

7、QBC查询条件

Hibernate各种查询操作(二)的更多相关文章

  1. 分享知识-快乐自己:Hibernate各种查询操作

    Hibernate各种查询操作(一) 测试数据库如下: t_sort表:                                   t_good表: 一.对象导航方式查询 查询所有食品类下面 ...

  2. Hibernate各种查询操作(一)

    测试数据库如下 t_sort表:                                   t_good表: 一.对象导航方式查询 查询所有食品类下面的食品 代码: //对象导航查询 @Te ...

  3. Hibernate【查询、连接池、逆向工程】

    前言 在Hibernate的第二篇中只是简单地说了Hibernate的几种查询方式....到目前为止,我们都是使用一些简单的主键查询阿...使用HQL查询所有的数据....本博文主要讲解Hiberna ...

  4. Hibernate修改操作 删除操作 查询操作 增加操作 增删改查 Hibernate增删查改语句

    我用的数据库是MySQL,实体类叫User public class User { private Integer uid; private String username; private Stri ...

  5. 百万年薪python之路 -- MySQL数据库之 MySQL行(记录)的操作(二) -- 多表查询

    MySQL行(记录)的操作(二) -- 多表查询 数据的准备 #建表 create table department( id int, name varchar(20) ); create table ...

  6. C# LINQ学习笔记二:LINQ标准查询操作概述

    本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5801249.html,记录一下学习过程以备后续查用. “标准查询运算符”是组成语言集成查询 (LINQ) 模式 ...

  7. JDBC的使用五大步骤以及查询操作-数据库编程(二)

    jdbc的使用步骤 1.加载jdbc的驱动. 2.打开数据库的连接. 3.建立一个会话,然后执行增删改查等基本的操作. 4.对结果进行处理 5.对环境进行清理,比如关闭会话等. 查询操作 首先用Cla ...

  8. Hibernate学习笔记(二)

    2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...

  9. hibernate(七) hibernate中查询方式详解

    序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等,如果不明白,可以先去看一下 MySQL数 ...

随机推荐

  1. c#中关于协变性和逆变性(又叫抗变)帮助理解

    今天回忆了之前看的<深入理解C#>这本书中的泛型章节,其中对泛型的可变性的理解.泛型可变性分两种:协变和逆变.逆变也又称为抗变. 怎么理解这两个名词的意思: ①:协变即为在泛型接口类型中使 ...

  2. hdu 1542/1255 Atlantis/覆盖的面积

    1542 1255 两道扫描线+线段树的入门题. 基本没有什么区别,前者是模板,后者因为是求覆盖次数至少在两次以上的,这个同样是具有并集性质的,所以把cover的判断条件更改一下就可以了qwq. hd ...

  3. NOIP前刷题记录

    因为本蒻实在太蒻了...对于即将到来的NOIP2018ssfd,所以下决心要把自己近期做过的题目(衡量标准为洛谷蓝题难度或以上)整理一下,归归类,简单地写一下思路,就当作自己复习了吧qwq 本随笔持续 ...

  4. luoguP3359 改造异或树

    https://www.luogu.org/problemnew/show/P3359 因为 a ^ b ^ b = a,所以我们预处理 1 到所有点的距离,将删边的操作反过来变成加边,对于每一个联通 ...

  5. 2019.2.15 t3 平均值

    #include <cstdio> #include <iostream> #include <cstring> #include <cmath> #i ...

  6. c++11 enable_shared_from_this

    本质的原因:raw data和引用计数的管理块,可能是分开的 使用场景: 需要在对象中得到shared ptr,  错误的代码:直接构造新的shared_ptr<A>对象,两个shared ...

  7. 2016级算法第一次练习赛-A.群鸦的盛宴

    858 群鸦的盛宴 题目链接:https://buaacoding.cn/problem/858/index 思路 本题乍一眼看过去,你可能会想到使用一个二维数组A[51][51]来记录从i到j的路线 ...

  8. Nginx 常用命令总结

    查看某个程序的进程:ps -aux | grep nginx (进程的名字:httpd-apahe进程 mysqld-mysql的进程 svn-svn的进程 php-fpm - PHP进程 ) 查看某 ...

  9. mongoDB使用小记

    1.简介: MongoDB是由c++语言编写的,基于分布式文件存储的开源数据库系统.MongoDB将数据存储为一个文档,数据结构有键-值对,类似于JSON对象. MongoDB其中的一些概念如下: M ...

  10. P2472 [SCOI2007]蜥蜴

    传送门 求无法逃离的蜥蜴总数的最小值就是求最多逃离的蜥蜴总数 所以显然考虑最大流,一个流量的路径就相当于一只蜥蜴逃离的路径 发现每个位置有一个最大经过次数,所以把每个位置拆成两个点$x,y$,$x$ ...