分享知识-快乐自己:Hibernate各种查询操作
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各种查询操作(一)
测试数据库如下 t_sort表: t_good表: 一.对象导航方式查询 查询所有食品类下面的食品 代码: //对象导航查询 @Te ...
- 分享知识-快乐自己:java代码 操作 solr
POM 文件: <!-- solr客户端 --> <dependency> <groupId>org.apache.solr</groupId> < ...
- Hibernate各种查询操作(二)
一.QBC的查询方式 使用QBC不在需要写hql语句,而是使用criteria对象的各种方法来实现. 1.查询所有 //使用QBC方式查询所有 @Test public void test11(){ ...
- Hibernate【查询、连接池、逆向工程】
前言 在Hibernate的第二篇中只是简单地说了Hibernate的几种查询方式....到目前为止,我们都是使用一些简单的主键查询阿...使用HQL查询所有的数据....本博文主要讲解Hiberna ...
- 分享知识-快乐自己:Caused by: org.hibernate.tool.schema.extract.spi.SchemaExtractionException: More than one table found in namespace (, ) : Dept (XXX)
在命名空间(,)中找到多个表 - SchemaExtractionException? 问题: 尝试在Java应用程序中使用Hibernate将一些值保存到表中时,我一直面临着这个奇怪的异常. 但是, ...
- 分享知识-快乐自己:Hibernate 中 get() 和 load()、sava、update、savaOrUpdate、merge,不同之处及执行原理?
1):Hibernate 中 get() 和 load() 有什么不同之处? 1)Hibernate的 get方法,会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在缓存中查 ...
- 分享知识-快乐自己:Hibernate 关联映射
关联关系映射--概念: 关联关系是使用最多的一种关系,非常重要.在内存中反映为实体关系,映射到DB中为主外键关系. 实体间的关联,即对外键的维护.关联关系的发生,即对外键数据的改变. 外键:外面的主键 ...
- 分享知识-快乐自己:搭建第一个 Hibernate (Demo)
使用 Hibernate 完成持久化操作 七大 步骤: 1.读取并解析配置文件及映射文件: Configuration configuration=new Configuration().config ...
- 分享知识-快乐自己:初识 Hibernate 概念片(一)
1):什么是 Hibernate? Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibe ...
随机推荐
- IOS Audio开发集合
打算每天抽出一点时间学习音频方面的知识,在此做下汇总: 1. 多媒体层预览 根据结构,明确学习内容.
- Linux视频培训教程
很详尽的Linux培训教程,既包含日常工作常常要用到的实践及技巧,又包含Linux认证及系统管理及架构,讲的很不错.最关键的.这么具体,完整的教程还是免费的.花了点时间拿它整理了下. 第一部分: Li ...
- oracle 使用job定时自动重置sequence
一.赋予用户创建和删除sequence的权限 grant create any sequence to user_name; grant drop any sequnce to user_name; ...
- RF ---library
RF内置库: http://robotframework.org/robotframework/ SSHLibrary: ---WEB自动化测试 http://robotframework.org ...
- HDU - 3874 Necklace (线段树 + 离线处理)
欢迎參加--每周六晚的BestCoder(有米! ) Necklace Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 65536/3 ...
- 织梦在广告(myad)中使用css样式
使用单引号,以及只有style这一个属性
- VESA-ADV7123-SOCKIT-DE2115
/*--VGA Timing--Horizontal :-- ______________ _____________-- | | |--_______________| VIDEO |_______ ...
- caffe--anaconda2--makefile.config--compile --ubuntu16.04
sea@sea-X550JK:/media/sea/wsWin10/wsUbuntu16.04/DlFrames/caffe$ cat Makefile.config: ## Refer to htt ...
- Centos 7 远程桌面客户端
在centos下面要远程连接windows,有人说用rdesktop,但是好像centos 7没有,对从源代码编译也不大感兴趣. 幸好还有人提醒, https://geekblood.com/2014 ...
- MongoDB--安装部署
MongoDB安装 说明: 本次安装教程: 版本:mongoDB-3.2.4 安装环境:windows 10 ,64位操作系统 准备:安装包.Robomongo(客户端用于查看mongoDB里面的数据 ...