Hibernate各种查询操作(一)

测试数据库如下:

t_sort表:                                   t_good表:

一、对象导航方式查询

查询所有食品类下面的食品

代码:

  1. //对象导航查询
  2. @Test
  3.  
  4. public void Test1(){
  5. SessionFactory sessionFactory = null;
  6. Session session = null;
  7. Transaction tx = null;
  8. try {
  9. sessionFactory = HibernateUtils.getFactory();
  10. session = sessionFactory.openSession();
  11. tx = session.beginTransaction();
  12. //1、使用get方法查询出食品类
  13. Sort food = session.get(Sort.class, 1);
  14. //2、使用sort对象的方法得到所有食品类中的食品
  15. Set<Good> set = food.getSetGoods();
  16. //3、遍历set集合
  17. for (Good good : set) {
  18. System.out.println(good);
  19. }
  20. tx.commit();
  21. } catch (Exception e) {
  22. tx.rollback();
  23. }finally{
  24. session.close();
  25. sessionFactory.close();
  26. }
  27. }

查询结果:

二、OID查询

OID查询就是根据id查询某一条记录

代码:

  1. //OID查询方式
  2. @Test
  3.  
  4. public void Test2(){
  5. SessionFactory sessionFactory = null;
  6. Session session = null;
  7. Transaction tx = null;
  8. try {
  9. sessionFactory = HibernateUtils.getFactory();
  10. session = sessionFactory.openSession();
  11. tx = session.beginTransaction();
  12. //OID查询就是使用get方法查询出一条记录
  13. Sort food = session.get(Sort.class, 1);
  14. System.out.println(food);
  15. tx.commit();
  16. } catch (Exception e) {
  17. tx.rollback();
  18. }finally{
  19. session.close();
  20. sessionFactory.close();
  21. }
  22. }

结果

    

三、HQL查询

hql查询是使用Hibernate Query Language进行的一种查询方式,在这种查询方式中必须要写hql语句才能查询。

1、查询所有

查询所有的hql语句格式为:from 实体类名称(以查询所有商品为例)

代码:

  1. // HQL查询所有。查询所有商品为例
  2. @Test
  3. public void Test3() {
  4. SessionFactory sessionFactory = null;
  5. Session session = null;
  6. Transaction tx = null;
  7. try {
  8. sessionFactory = HibernateUtils.getFactory();
  9. session = sessionFactory.openSession();
  10. tx = session.beginTransaction();
  11. // 1、得到Query对象,并写入hql语句
  12. Query query = session.createQuery("from Good");
  13. //2、使用Query对象的list方法得到数据集合
  14. List<Good> list = query.list();
  15. //3、遍历集合获取数据
  16. for (Good good : list) {
  17. System.out.println(good);
  18. }
  19. tx.commit();
  20. } catch (Exception e) {
  21. tx.rollback();
  22. } finally {
  23. session.close();
  24. sessionFactory.close();
  25. }
  26. }

测试结果:

  

2、条件查询

条件查询有准确查询和模糊查询,使用hql语句完成。

(1)准确查询hql语句:from 实体类名 where 实体属性名 = ? and 实体类属性名 = ?。

准确查询代码: 

  1. // HQL准确条件查询。查询名字为面包,描述为奶油面包的记录
  2. @Test
  3. public void Test4() {
  4. SessionFactory sessionFactory = null;
  5. Session session = null;
  6. Transaction tx = null;
  7. try {
  8. sessionFactory = HibernateUtils.getFactory();
  9. session = sessionFactory.openSession();
  10. tx = session.beginTransaction();
  11. // 1、得到Query对象,并写入hql语句
  12. Query query = session.createQuery("from Good where gname = ? and gmono =?");
  13. //2、填写上一步中占位符的内容
  14. query.setParameter(0, "面包");
  15. query.setParameter(1, "奶油面包");
  16. //3、使用Query对象的list方法得到数据集合
  17. List<Good> list = query.list();
  18. //3、遍历集合获取数据
  19. for (Good good : list) {
  20. System.out.println(good);
  21. }
  22. tx.commit();
  23. } catch (Exception e) {
  24. tx.rollback();
  25. } finally {
  26. session.close();
  27. sessionFactory.close();
  28. }
  29. }

查询结果:

    

提示: 查询语法还有以下方式:(仅供参考)

(2)模糊查询hql语句:from 实体类名 where 实体类属性名 like  ?。

模糊查询代码:

  1. // HQL模糊条件查询。查询名字中有"手"字的记录
  2. @Test
  3. public void Test5() {
  4. SessionFactory sessionFactory = null;
  5. Session session = null;
  6. Transaction tx = null;
  7. try {
  8. sessionFactory = HibernateUtils.getFactory();
  9. session = sessionFactory.openSession();
  10. tx = session.beginTransaction();
  11. // 1、得到Query对象,并写入hql语句
  12. Query query = session.createQuery("from Good where gname like ?");
  13. // 2、填写上一步中占位符的内容
  14. query.setParameter(0, "%手%");
  15. // 3、使用Query对象的list方法得到数据集合
  16. List<Good> list = query.list();
  17. // 3、遍历集合获取数据
  18. for (Good good : list) {
  19. System.out.println(good);
  20. }
  21. tx.commit();
  22. } catch (Exception e) {
  23. tx.rollback();
  24. } finally {
  25. session.close();
  26. sessionFactory.close();
  27. }
  28. }

模糊查询结果:

3、排序查询

排序查询hql语句:正序: form 实体类名称 order by 实体类属性名 asc

         倒序:from 实体类名称 order by 实体类属性名 desc

(1)正序查询代码 

  1. // HQL排序条件查询。gid正序查询
  2. @Test
  3. public void Test6() {
  4. SessionFactory sessionFactory = null;
  5. Session session = null;
  6. Transaction tx = null;
  7. try {
  8. sessionFactory = HibernateUtils.getFactory();
  9. session = sessionFactory.openSession();
  10. tx = session.beginTransaction();
  11. // 1、得到Query对象,并写入hql语句
  12. Query query = session.createQuery("from Good order by gid asc");
  13. // 2、使用Query对象的list方法得到数据集合
  14. List<Good> list = query.list();
  15. // 3、遍历集合获取数据
  16. for (Good good : list) {
  17. System.out.println(good);
  18. }
  19. tx.commit();
  20. } catch (Exception e) {
  21. tx.rollback();
  22. } finally {
  23. session.close();
  24. sessionFactory.close();
  25. }
  26. }

  正序查询测试结果:

    

(2)倒序查询代码: 

  1. // HQL排序查询。gid倒序查询
  2. @Test
  3. public void Test7() {
  4. SessionFactory sessionFactory = null;
  5. Session session = null;
  6. Transaction tx = null;
  7. try {
  8. sessionFactory = HibernateUtils.getFactory();
  9. session = sessionFactory.openSession();
  10. tx = session.beginTransaction();
  11. // 1、得到Query对象,并写入hql语句
  12. Query query = session.createQuery("from Good order by gid desc");
  13. // 2、使用Query对象的list方法得到数据集合
  14. List<Good> list = query.list();
  15. // 3、遍历集合获取数据
  16. for (Good good : list) {
  17. System.out.println(good);
  18. }
  19. tx.commit();
  20. } catch (Exception e) {
  21. tx.rollback();
  22. } finally {
  23. session.close();
  24. sessionFactory.close();
  25. }
  26. }

倒序查询测试结果:

    

4、分页查询

在mysql数据库中分页使用limit实现,在Hibernate中使用Query对象的两个方法实现。

分页查询代码:   

  1. // HQL分页查询。每页3条数据查询
  2. @Test
  3. public void Test8() {
  4. SessionFactory sessionFactory = null;
  5. Session session = null;
  6. Transaction tx = null;
  7. try {
  8. sessionFactory = HibernateUtils.getFactory();
  9. session = sessionFactory.openSession();
  10. tx = session.beginTransaction();
  11. // 1、得到Query对象,并写入hql语句
  12. Query query = session.createQuery("from Good");
  13. //2、使用Query的方法实现分页
  14. //2.1设置第一个要查询的位置(计算公式:(当前页数-1)*每页的记录数)
  15. query.setFirstResult(0);
  16. //2.2设置每页显示的最大记录数
  17. query.setMaxResults(3);
  18. // 2、使用Query对象的list方法得到数据集合
  19. List<Good> list = query.list();
  20. // 3、遍历集合获取数据
  21. for (Good good : list) {
  22. System.out.println(good);
  23. }
  24. tx.commit();
  25. } catch (Exception e) {
  26. tx.rollback();
  27. } finally {
  28. session.close();
  29. sessionFactory.close();
  30. }
  31. }

测试结果:

  

5、投影查询

投影查询概念:查询的不是表中的所有字段,而是一部分字段

代码:

  1. // HQL投影查询。查询Good的name
  2. @Test
  3. public void Test9() {
  4. SessionFactory sessionFactory = null;
  5. Session session = null;
  6. Transaction tx = null;
  7. try {
  8. sessionFactory = HibernateUtils.getFactory();
  9. session = sessionFactory.openSession();
  10. tx = session.beginTransaction();
  11. // 1、得到Query对象,并写入hql语句
  12. Query query = session.createQuery("select gname from Good");
  13. //2、获取结果
  14. List<Object> list =query.list();
  15.  
  16. for (Object object : list) {
  17. System.out.println(object);
  18. }
  19. tx.commit();
  20. } catch (Exception e) {
  21. tx.rollback();
  22. } finally {
  23. session.close();
  24. sessionFactory.close();
  25. }
  26. }

测试结果:

    

6、聚集函数查询

常用聚集函数:count  avg  max  min  sum

以count为例进行说明

hql语句:select count(*) from 实体类名称

代码:

  1. // HQL投影查询。查询Good的name
  2. @Test
  3. public void Test10() {
  4. SessionFactory sessionFactory = null;
  5. Session session = null;
  6. Transaction tx = null;
  7. try {
  8. sessionFactory = HibernateUtils.getFactory();
  9. session = sessionFactory.openSession();
  10. tx = session.beginTransaction();
  11. // 1、得到Query对象,并写入hql语句
  12. Query query = session.createQuery("select count(*) from Good");
  13. //2、获取结果(结果为long类型)
  14. Object obj = query.uniqueResult();
  15. //3、转化为long(类型为long,转为int会报错)
  16. Long long1 = (Long) obj;
  17. int count = long1.intValue();
  18. System.out.println(count);
  19. tx.commit();
  20. } catch (Exception e) {
  21. tx.rollback();
  22. } finally {
  23. session.close();
  24. sessionFactory.close();
  25. }
  26. }

测试结果:

    

分享知识-快乐自己:Hibernate各种查询操作的更多相关文章

  1. Hibernate各种查询操作(一)

    测试数据库如下 t_sort表:                                   t_good表: 一.对象导航方式查询 查询所有食品类下面的食品 代码: //对象导航查询 @Te ...

  2. 分享知识-快乐自己:java代码 操作 solr

    POM 文件: <!-- solr客户端 --> <dependency> <groupId>org.apache.solr</groupId> < ...

  3. Hibernate各种查询操作(二)

    一.QBC的查询方式 使用QBC不在需要写hql语句,而是使用criteria对象的各种方法来实现. 1.查询所有 //使用QBC方式查询所有 @Test public void test11(){ ...

  4. Hibernate【查询、连接池、逆向工程】

    前言 在Hibernate的第二篇中只是简单地说了Hibernate的几种查询方式....到目前为止,我们都是使用一些简单的主键查询阿...使用HQL查询所有的数据....本博文主要讲解Hiberna ...

  5. 分享知识-快乐自己:Caused by: org.hibernate.tool.schema.extract.spi.SchemaExtractionException: More than one table found in namespace (, ) : Dept (XXX)

    在命名空间(,)中找到多个表 - SchemaExtractionException? 问题: 尝试在Java应用程序中使用Hibernate将一些值保存到表中时,我一直面临着这个奇怪的异常. 但是, ...

  6. 分享知识-快乐自己:Hibernate 中 get() 和 load()、sava、update、savaOrUpdate、merge,不同之处及执行原理?

    1):Hibernate 中 get()  和 load() 有什么不同之处? 1)Hibernate的 get方法,会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在缓存中查 ...

  7. 分享知识-快乐自己:Hibernate 关联映射

    关联关系映射--概念: 关联关系是使用最多的一种关系,非常重要.在内存中反映为实体关系,映射到DB中为主外键关系. 实体间的关联,即对外键的维护.关联关系的发生,即对外键数据的改变. 外键:外面的主键 ...

  8. 分享知识-快乐自己:搭建第一个 Hibernate (Demo)

    使用 Hibernate 完成持久化操作 七大 步骤: 1.读取并解析配置文件及映射文件: Configuration configuration=new Configuration().config ...

  9. 分享知识-快乐自己:初识 Hibernate 概念片(一)

    1):什么是 Hibernate? Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibe ...

随机推荐

  1. 【Android应用开发详解】实现第三方授权登录、分享以及获取用户资料

      由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折,查阅了一番资料,做了一个Demo.实现起来的效果还是不错的,不敢独享,决定写一个总结的教程,供大家互相 ...

  2. 整合Kafka到Spark Streaming——代码示例和挑战

    作者Michael G. Noll是瑞士的一位工程师和研究员,效力于Verisign,是Verisign实验室的大规模数据分析基础设施(基础Hadoop)的技术主管.本文,Michael详细的演示了如 ...

  3. 开源监控软件ganglia

    开源监控软件ganglia安装手册 Ganglia是一个监控服务器,集群的开源软件,能够用曲线图表现最近一个小时,最近一天,最近一周,最近一月,最近一年的服务器或者集群的cpu负载,内存,网络,硬盘等 ...

  4. Java过滤特殊字符

    Java正则表达式过滤 1.Java过滤特殊字符的正则表达式----转载 java过滤特殊字符的正则表达式[转载] 2010-08-05 11:06 Java过滤特殊字符的正则表达式   关键字: j ...

  5. 【转】iOS安全之RSA加密/生成公钥、秘钥 pem文件

    在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于 ...

  6. 【EDAS问题】轻量级EDAS部署hsf服务出现找不到类的解决方案

    本地运行轻量级EDAS调用服务的时候报错如下: 2018-01-08 13:16:58.029 WARN [http-bio-8090-exec-8:t.hsf] [RPC Protocol call ...

  7. C#泛型<T>说明

    泛型:即通过参数化类型来实现在同一份代码上操作多种数据类型.泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用. C#泛型的作用概述 C#泛型赋予了代码更强的类型安全,更 ...

  8. IDEA下使用Jetty进行Debug模式调试

    过程例如以下: (1)找到选项卡中的 –Run– 然后找到 –Edit Configurations (2)点击下图中绿色的plus–找到Maven点进去 (3)依照下边的方式在Command lin ...

  9. 【BZOJ2989】数列 kd-tree

    [BZOJ2989]数列 Description 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x-y|+|a[x]-a[y]| ...

  10. EasyDSS流媒体解决方案之多方式虚拟直播方法

    EasyDSS_Solution虚拟直播 EasyDSS_Solution虚拟直播,是EasyDSS流媒体解决方案提供的虚拟直播方案.可以通过三种方式创建虚拟直播. (1)点播的视频文件: (2)本地 ...