Hibernate各种查询操作(二)
一、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各种查询操作(二)的更多相关文章
- 分享知识-快乐自己:Hibernate各种查询操作
Hibernate各种查询操作(一) 测试数据库如下: t_sort表: t_good表: 一.对象导航方式查询 查询所有食品类下面 ...
- Hibernate各种查询操作(一)
测试数据库如下 t_sort表: t_good表: 一.对象导航方式查询 查询所有食品类下面的食品 代码: //对象导航查询 @Te ...
- Hibernate【查询、连接池、逆向工程】
前言 在Hibernate的第二篇中只是简单地说了Hibernate的几种查询方式....到目前为止,我们都是使用一些简单的主键查询阿...使用HQL查询所有的数据....本博文主要讲解Hiberna ...
- Hibernate修改操作 删除操作 查询操作 增加操作 增删改查 Hibernate增删查改语句
我用的数据库是MySQL,实体类叫User public class User { private Integer uid; private String username; private Stri ...
- 百万年薪python之路 -- MySQL数据库之 MySQL行(记录)的操作(二) -- 多表查询
MySQL行(记录)的操作(二) -- 多表查询 数据的准备 #建表 create table department( id int, name varchar(20) ); create table ...
- C# LINQ学习笔记二:LINQ标准查询操作概述
本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5801249.html,记录一下学习过程以备后续查用. “标准查询运算符”是组成语言集成查询 (LINQ) 模式 ...
- JDBC的使用五大步骤以及查询操作-数据库编程(二)
jdbc的使用步骤 1.加载jdbc的驱动. 2.打开数据库的连接. 3.建立一个会话,然后执行增删改查等基本的操作. 4.对结果进行处理 5.对环境进行清理,比如关闭会话等. 查询操作 首先用Cla ...
- Hibernate学习笔记(二)
2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...
- hibernate(七) hibernate中查询方式详解
序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等,如果不明白,可以先去看一下 MySQL数 ...
随机推荐
- C# winform 自定义鼠标光标
第一种:(调用系统API)首先引入两个命名空间代码如下: using System.Runtime.InteropServices;using System.Reflection;导入API代码如下: ...
- AJAX方式调用百度天气
后台代码: [HttpPost] public string AjaxWeather() { string CityName = string.IsNullOrEmpty(Request.Form[& ...
- sharepoint 2010 GetUserProfileByName 5566
After some further investigation i found that it's actually the "ASP.NET Impersonation" th ...
- 适用于Java的嵌入式脚本语言
此文已由作者赵昕授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. fakescript 轻量级嵌入式脚本语言 https://github.com/esrrhs/fakescr ...
- GEEK UNINSTALLER
geek.exe https://geekuninstaller.com/download Event log message indicates that the Windows Installer ...
- python 导入模块与使用
学习python之前一定要了解导入模块是怎么导入的,至少在看代码时不知道能很快的了解别人写的东西是哪里来. Python默认仅安装部分基础或核心模块,启动时也仅加载了基础模块,在需要是再显式的加载其他 ...
- 3,ThreadGroup 的使用场景以及用法
1 一个大型任务,可分成多个独立的子线程并发进行,最后等待所有的子线程执行结束然后继续往下执行, 使用场景比如 要查找某个用户的最近三个月的通话记录,起 3 个子线程,分别查找最近三个月的记录,然后通 ...
- 追随自己的价值观:用研经理 Anne Diaz 职业探索之路
『漫谈』系列聚焦了人性脆弱面的价值.每期的对话嘉宾可能是爱彼迎设计团队的成员,也可能来自设计界的其他领域.对话主题都是我们在工作中很少讨论的话题. 这些话题涉及不同方面,比如失败.人生道路.冲突.成长 ...
- git恢复到上次提交
4个区 5种状态 未修改(Origin) 已修改(Modified) 已暂存(Staged) 已提交(Committed) 已推送(Pushed) 检查修改 已修改,未暂存(检查工作区与暂存区间的差异 ...
- 调试K3网页版需要注意的问题
1.BIN目录下不能存放类名相同的多个文件,即使修改了dll名称也不可以,必须保持唯一性,多余的备份到其他目录 2.引用的标准dll集合需要与当前运行程序的标准dll集合保持一致,可以通过修改引用路径 ...