一、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. SharpMap入门教程

    SharpMap是一个基于.NET Framework 4,采用C#开发的地图渲染引擎,非常易于使用.本教程针对SharpMap入门及开发,讲述如何基于SharpMap组件渲染Shapefile数据. ...

  2. DateTime.Now.ToString("yyyy/MM/dd") 时间格式化中的MM为什么是大写的?

    如果MM是小写,就表示时间里的分钟yyyy-MM-dd HH:mm:ss (年-月-日 时:分:秒) yyyy-MM-dd HH:mm:ss 年-月-日 时:分:秒大写是为了区分“月”与“分” 顺便说 ...

  3. C#统计英文文本中的单词数并排序

    思路如下:1.使用的Hashtable(高效)集合,记录每个单词出现的次数2.采用ArrayList对Hashtable中的Keys按字母序排列3.排序使用插入排序(稳定) public void S ...

  4. C#应用程序所有已经打开的窗体的集合

    获取所有打开的窗体的集合 Application.OpenForms 获取其中的某个窗体 Application.OpenForms["窗体名"]

  5. 编写高质量JS代码中

    前段时间看了几道关于前端javascript的面试题目,方觉函数调用模式等基础的重要性.于是,下定决心,好好补补基础,即便不能深入语言的内部设计模式,也要对基本面向对象概念有比较深入的理解. 继续上一 ...

  6. JS延时器 定时器 暂停器 中断器

    // numberMillis 毫秒 function sleep(numberMillis) { var now = new Date(); var exitTime = now.getTime() ...

  7. [ActionScript 3.0] 创建倒影

    package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Display ...

  8. [redis] 数据特性简单实验

    位图 由bit位组成的数组,实际的底层数组类型是字符串,而字符串的本质是二进制大对象,所以将其视作位图,位图存储的是boolean指,一定程度上可以减少存储空间. -- 设置位图指定偏移量的比特位的值 ...

  9. webpack构建多页面react项目(webpack+typescript+react)

    目录介绍 src:里面的每个文件夹就是一个页面,页面开发相关的组件.图片和样式文件就存放在对应的文件夹下. tpl:里面放置模板文件,当webpack打包时为html-webpack-plugin插件 ...

  10. 容器化VS微服务

    1 微服务 1.1 思想 开发人员自己测试.部署和运维自己编写的代码,即自己负责构建生命周期的全部. 1.2 Spring Boot 提供服务化的能力,即把容器.服务所需依赖和服务一起打包成一个jar ...