分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

分享知识-快乐自己:Hibernate各种查询操作

发布时间:2023-09-06 02:22责任编辑:赖小花关键词: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各种查询操作

原文地址:https://www.cnblogs.com/mlq2017/p/9860173.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved