一、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# winform 自定义鼠标光标

    第一种:(调用系统API)首先引入两个命名空间代码如下: using System.Runtime.InteropServices;using System.Reflection;导入API代码如下: ...

  2. AJAX方式调用百度天气

    后台代码: [HttpPost] public string AjaxWeather() { string CityName = string.IsNullOrEmpty(Request.Form[& ...

  3. sharepoint 2010 GetUserProfileByName 5566

    After some further investigation i found that it's actually the "ASP.NET Impersonation" th ...

  4. 适用于Java的嵌入式脚本语言

    此文已由作者赵昕授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. fakescript 轻量级嵌入式脚本语言 https://github.com/esrrhs/fakescr ...

  5. GEEK UNINSTALLER

    geek.exe https://geekuninstaller.com/download Event log message indicates that the Windows Installer ...

  6. python 导入模块与使用

    学习python之前一定要了解导入模块是怎么导入的,至少在看代码时不知道能很快的了解别人写的东西是哪里来. Python默认仅安装部分基础或核心模块,启动时也仅加载了基础模块,在需要是再显式的加载其他 ...

  7. 3,ThreadGroup 的使用场景以及用法

    1 一个大型任务,可分成多个独立的子线程并发进行,最后等待所有的子线程执行结束然后继续往下执行, 使用场景比如 要查找某个用户的最近三个月的通话记录,起 3 个子线程,分别查找最近三个月的记录,然后通 ...

  8. 追随自己的价值观:用研经理 Anne Diaz 职业探索之路

    『漫谈』系列聚焦了人性脆弱面的价值.每期的对话嘉宾可能是爱彼迎设计团队的成员,也可能来自设计界的其他领域.对话主题都是我们在工作中很少讨论的话题. 这些话题涉及不同方面,比如失败.人生道路.冲突.成长 ...

  9. git恢复到上次提交

    4个区 5种状态 未修改(Origin) 已修改(Modified) 已暂存(Staged) 已提交(Committed) 已推送(Pushed) 检查修改 已修改,未暂存(检查工作区与暂存区间的差异 ...

  10. 调试K3网页版需要注意的问题

    1.BIN目录下不能存放类名相同的多个文件,即使修改了dll名称也不可以,必须保持唯一性,多余的备份到其他目录 2.引用的标准dll集合需要与当前运行程序的标准dll集合保持一致,可以通过修改引用路径 ...