Hibernate查询操作
t_sort表: t_good表:
一、对象导航方式查询
查询所有食品类下面的食品
代码:
//对象导航查询
@Test public void Test1(){
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1、使用get方法查询出食品类
Sort food = session.get(Sort.class, 1);
//2、使用sort对象的方法得到所有食品类中的食品
Set<Good> set = food.getSetGoods();
//3、遍历set集合
for (Good good : set) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
}finally{
session.close();
sessionFactory.close();
}
}
查询结果:
二、OID查询
OID查询就是根据id查询某一条记录
代码
//OID查询方式
@Test public void Test2(){
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//OID查询就是使用get方法查询出一条记录
Sort food = session.get(Sort.class, 1);
System.out.println(food);
tx.commit();
} catch (Exception e) {
tx.rollback();
}finally{
session.close();
sessionFactory.close();
}
}
结果
三、HQL查询
hql查询是使用Hibernate Query Language进行的一种查询方式,在这种查询方式中必须要写hql语句才能查询。
1、查询所有
查询所有的hql语句格式为:from 实体类名称(以查询所有商品为例)
代码:
// HQL查询所有。查询所有商品为例
@Test
public void Test3() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、得到Query对象,并写入hql语句
Query query = session.createQuery("from Good");
//2、使用Query对象的list方法得到数据集合
List<Good> list = query.list();
//3、遍历集合获取数据
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
测试结果:
2、条件查询
条件查询有准确查询和模糊查询,使用hql语句完成。
(1)准确查询hql语句:from 实体类名 where 实体属性名 = ? and 实体类属性名 = ?。
准确查询代码:
// HQL准确条件查询。查询名字为面包,描述为奶油面包的记录
@Test
public void Test4() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、得到Query对象,并写入hql语句
Query query = session.createQuery("from Good where gname = ? and gmono =?");
//2、填写上一步中占位符的内容
query.setParameter(0, "面包");
query.setParameter(1, "奶油面包");
//3、使用Query对象的list方法得到数据集合
List<Good> list = query.list();
//3、遍历集合获取数据
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
查询结果:
(2)模糊查询hql语句:from 实体类名 where 实体类属性名 like ?。
模糊查询代码:
// HQL模糊条件查询。查询名字中有"手"字的记录
@Test
public void Test5() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、得到Query对象,并写入hql语句
Query query = session.createQuery("from Good where gname like ?");
// 2、填写上一步中占位符的内容
query.setParameter(0, "%手%");
// 3、使用Query对象的list方法得到数据集合
List<Good> list = query.list();
// 3、遍历集合获取数据
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
模糊查询结果:
3、排序查询
排序查询hql语句:正序: form 实体类名称 order by 实体类属性名 asc
倒序:from 实体类名称 order by 实体类属性名 desc
(1)正序查询代码
// HQL排序条件查询。gid正序查询
@Test
public void Test6() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、得到Query对象,并写入hql语句
Query query = session.createQuery("from Good order by gid asc");
// 2、使用Query对象的list方法得到数据集合
List<Good> list = query.list();
// 3、遍历集合获取数据
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
正序查询测试结果:
(2)倒序查询代码:
// HQL排序查询。gid倒序查询
@Test
public void Test7() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、得到Query对象,并写入hql语句
Query query = session.createQuery("from Good order by gid desc");
// 2、使用Query对象的list方法得到数据集合
List<Good> list = query.list();
// 3、遍历集合获取数据
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
倒序查询测试结果:
4、分页查询
在mysql数据库中分页使用limit实现,在Hibernate中使用Query对象的两个方法实现。
分页查询代码:
// HQL分页查询。每页3条数据查询
@Test
public void Test8() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、得到Query对象,并写入hql语句
Query query = session.createQuery("from Good");
//2、使用Query的方法实现分页
//2.1设置第一个要查询的位置(计算公式:(当前页数-1)*每页的记录数)
query.setFirstResult(0);
//2.2设置每页显示的最大记录数
query.setMaxResults(3);
// 2、使用Query对象的list方法得到数据集合
List<Good> list = query.list();
// 3、遍历集合获取数据
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
测试结果:
5、投影查询
投影查询概念:查询的不是表中的所有字段,而是一部分字段
代码:
// HQL投影查询。查询Good的name
@Test
public void Test9() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、得到Query对象,并写入hql语句
Query query = session.createQuery("select gname from Good");
//2、获取结果
List<Object> list =query.list(); for (Object object : list) {
System.out.println(object);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
测试结果:
6、聚集函数查询
常用聚集函数:count avg max min sum
以count为例进行说明
hql语句:select count(*) from 实体类名称
代码:
// HQL投影查询。查询Good的name
@Test
public void Test10() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、得到Query对象,并写入hql语句
Query query = session.createQuery("select count(*) from Good");
//2、获取结果(结果为long类型)
Object obj = query.uniqueResult();
//3、转化为long(类型为long,转为int会报错)
Long long1 = (Long) obj;
int count = long1.intValue();
System.out.println(count);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
测试结果:
Hibernate查询操作的更多相关文章
- Hibernate查询所有数据的操作
Hibernate查询所有数据的操作方式有三种. 1.Query (1)使用该方法查询时,不需要编写sql语句,但是需要编写hql(Hibernate Query Language)语句,该语句是Hi ...
- 分享知识-快乐自己:Hibernate各种查询操作
Hibernate各种查询操作(一) 测试数据库如下: t_sort表: t_good表: 一.对象导航方式查询 查询所有食品类下面 ...
- Hibernate修改操作 删除操作 查询操作 增加操作 增删改查 Hibernate增删查改语句
我用的数据库是MySQL,实体类叫User public class User { private Integer uid; private String username; private Stri ...
- Hibernate查询
HIbernate查询 使用get方法 使用get方法通过持久类名和ID号查找一个对象Stu instance = (Stu) getsession() .get("com.lovo.po. ...
- [摘]Hibernate查询事务必要性
背景: 添加事务与否都不影响Hibernate的查询操作. 问题: 查询操作是否有必要添加事务? 答案1: Hibernate官方手册上建议任何操作(增删改查)都需要添加事务. 答案2: robbin ...
- Hibernate查询之HQL查询
转自:http://blog.csdn.net/xiao_yi/article/details/1733342 Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(H ...
- 六种方式实现hibernate查询
最近在学习Hibernate的基本内容,刚好在项目中有用到,基本上都是用到哪就学哪. 今天看看六种方式实现hibernate查询......... 分别是HQL查询,对象化查询Criteria方法,动 ...
- Hibernate查询、连接池、二级缓存
Hibernate第三天: 1. 对象状态 2. session缓存 3. lazy懒加载 4. 映射 一对一对映射 组件/继承映射 目标: 一.hibernate查询 二.hibernate对连接池 ...
- 第八章 Hibernate数据操作技巧
第八章 Hibernate数据操作技巧8.1 分组统计数据 语法:[select]... from ...[where] [group by...[having...]] [order by ...
随机推荐
- power designer 16.5 使用总结[转]
测试环境:power designer 16.5.vs2010.win7 对于破解版的power designer经常出现崩溃.停止工作的情况 请运行pdlegacyshell16.exe,不要运行P ...
- hdoj:2051
#include <iostream> #include <string> #include <vector> #include <algorithm> ...
- Oracle中exists替代in语句
大家都知道exists的速度要比in的速度快,也知道exists函数返回一个布尔值,也就是说exists函数里最后要是 a.id =b.id类似这种方式结束. 例如: SELECT * FROM TB ...
- 解决SVN 每次操作都需要重输入用户名密码问题
把目录C:\Users\当前账号\AppData\Roaming\Subversion\auth下的文件删除,然后重启hbuilder或eclipse工具,重新输入账号密码之后,保存即可解决该问题.
- stl综合
区别: List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]. Vector ...
- MA5680T OLT管理软件,全智能判断板卡,无人值守策略,根据光猫类型自动扫描添加光猫
轻量型的ONU查询工具,智能查询板卡,查询自动发现,搜索ONU等功能,需要更多智能功能,可联系QQ:561454825 下载地址:下载地址1
- CentOS7 安装Python3,开发SocketIO 客户端
CentOS7安装Python3,开发SocketIO 客户端 参考:https://blog.csdn.net/lovefengruoqing/article/details/79284573 步骤 ...
- 四、Sql Server 基础培训《进度4-插入数据(实际操作)》
知识点: 假设有订单表 CREATE TABLE Order ( ID int identity(1,1) not null primary key, --内码 BillNo varchar(100) ...
- Nginx模块开发与架构解析(nginx安装、配置说明)
第一章 研究nginx前的准备工作 Linux操作系统需要2.6及其以上的内核(支持epoll) 使用nginx的必备软件 Linux内核参数优化方案 安装nginx 控制nginx 第二章 ngin ...
- vue里computed的get和set
computed里的对象有get和set方法. get是当该对象所依赖的变量发生变化是执行,重新returncomputed结果. set是该对象的值变化时会执行,并且将变化的结果作为参数传进set里 ...