Hibernate查询

您所在的位置:网站首页 hql条件查询语句 Hibernate查询

Hibernate查询

2024-07-16 11:53:03| 来源: 网络整理| 查看: 265

hibernate查询

概述:数据查询与检索是Hibernate中的一个亮点。相对其他ORM实现而言,Hibernate提供了灵活多样的查询机制。 HQL ——(Hibernate Query Language):Hibernate语言查询它是完全面向对象的查询语句,查询功能非常强大,具备继承、多态和关联等特性 。Hibernate官方推荐使用HQL进行查询。 QBC——(Query By Criteria):标准化对象查询,以对象的方式进行查询,将查询语句封装为对象操作。优点:可读性好,符合Java 程序员的编码习惯。 Native SQL Queries:原生SQL查询,直接使用数据库提供的SQL方言进行查询。

HQL概述

Hibernate查询语言(HQL)是面向对象的查询语言,其结构与SQL查询相似,不同的是,HQL查询的主体是持久化类而不是数据表。 HQL提供了一种应用和数据库之间的抽象,提高了可移植性。 HQL子句本身大小写无关,但是其中出现的类名和属性名必须注意大小写。

HQL基本查询

(1)使用HQL查询最简单的例子,就是查询指定类对应表格的所有记录

//1.基本的HQL查询,查询所有属性 public void testQueryUser() { Configuration cfg = null; SessionFactory sf = null; Session session = null; Transaction ts = null; try { sf = HibernateUtil.getSessionFactory();//使用单例模式创建Configuration对象和Session工厂 session = sf.getCurrentSession();//保证每个读写线程有唯一的session实例 ts = session.beginTransaction();//创建事务 Query query=session.createQuery("from User"); List users=query.list(); //查询方法一 // for(int i=0;i // System.out.println(u.toString()); // } //查询方法三 Iterator iterator = users.iterator(); while(iterator.hasNext()) { User u=(User)iterator.next(); System.out.println(u.toString()); } ts.commit();//提交事务 } catch (Exception e) { e.printStackTrace(); if(ts != null) { ts.rollback(); } }finally { } }

在这里插入图片描述 在查询类对应的表格时,需注意到继承的问题,Hibernate会自动判定继承关系,如果查询的类是某类的父类,则会返回与父类、子类对应的所有表格记录。 例如如果查询java.lang.Object,由于Object在Java中是所有类的父类别,所以下面这个查询会返回数据库中所有表格的记录: Query query = session.createQuery(“from java.lang.Object”); (2)针对某个属性作查询

//2.基本的HQL查询,查询类的一个属性 public void testQueryUserOneAttribute() { Configuration cfg = null; SessionFactory sf = null; Session session = null; Transaction ts = null; try { sf = HibernateUtil.getSessionFactory();//使用单例模式创建Configuration对象和Session工厂 session = sf.getCurrentSession();//保证每个读写线程有唯一的session实例 ts = session.beginTransaction();//创建事务 Query query=session.createQuery("select u.name from User u");//属性 List names=query.list(); for(int i=0;i e.printStackTrace(); if(ts != null) { ts.rollback(); } }finally { } }

在这里插入图片描述 (3)查询两个以上的属性,查询的结果会以数组的方式返回

//3、基本的HQL查询,查询类的几个属性 public void testQueryUserSeveralAttributes(){ Configuration cfg =null; SessionFactory sf=null; Session session=null; Transaction ts=null; try { sf=HibernateUtil.getSessionFactory();//SessionFactory单态模式 session=sf.getCurrentSession();//保证每个读写线程有唯一的session实例 ts=session.beginTransaction(); Query query=session.createQuery("select u.name,u.age from User u"); List attributes=query.list(); for(int i=0;i // TODO Auto-generated catch block e.printStackTrace(); if(ts !=null) { ts.rollback(); } }finally { } }

在这里插入图片描述 (4)使用distinct去除资料重复的记录

//4、基本的HQL查询,distinct去除重复 public void testQueryUserOneAttributeByDistinct() { Configuration cfg = null; SessionFactory sf = null; Session session = null; Transaction ts = null; try { sf = HibernateUtil.getSessionFactory();//使用单例模式创建Configuration对象和Session工厂 session = sf.getCurrentSession();//保证每个读写线程有唯一的session实例 ts = session.beginTransaction();//创建事务 Query query=session.createQuery("select distinct u.name from User u");//属性 List names=query.list(); for(int i=0;i e.printStackTrace(); if(ts != null) { ts.rollback(); } }finally { } }

在这里插入图片描述 (5)HQL实例化查询 如果User类提供有适当的构建方法,则可以在使用HQL时直接指定新建一个对象传回

//5、基本的HQL查询,实例化查询 public void testQueryUserByExample() { Configuration cfg = null; SessionFactory sf = null; Session session = null; Transaction ts = null; try { sf = HibernateUtil.getSessionFactory();//使用单例模式创建Configuration对象和Session工厂 session = sf.getCurrentSession();//保证每个读写线程有唯一的session实例 ts = session.beginTransaction();//创建事务 Query query=session.createQuery("select new User(u.name,u.age) from User u");//属性 List users=query.list(); for(int i=0;i session.saveOrUpdate(u);//此时u是瞬时对象 } } ts.commit();//提交事务 } catch (Exception e) { e.printStackTrace(); if(ts != null) { ts.rollback(); } }finally { } }

构造方法:

public User(String name,int age) { this.name = name; this.age=age; }

在这里插入图片描述 注意,这个返回的User实例并未与数据库有任何关联,可以试着取得id属性,可以发现它的值是0,如果试图使用Session的saveOrupdate()方法,则会新增一条记录而不是更新原有的记录。

HQL统计函数查询

可以在HQL中使用函数,经常使用的函数有如下几个: count():统计记录条数。 min():求最小值。 max():求最大值。 sum():求和。 avg():求平均值。 1.例如取得记录集的大小: 例子: Query query = session.createQuery(“select count(*) from User”); Object count = (Object)query.uniqueResult();//如果查询返回的集合中只有一个对象时,就可以使用uniqueResult()方法 System.out.println(“共有”+count+“条记录”); 2.使用avg()取得属性的平均值: 例子 Query query = session.createQuery(“select avg(u.age) from User u”); //Object average =(Object)query.uniqueResult(); Number average =(Number)query.uniqueResult(); System.out.println(“平均年龄为:”+average);

HQL条件查询——where子句

1.可以使用where子句来限定查询的条件,除了 = 运算之外,还有 >、>=、 Configuration cfg = null; SessionFactory sf = null; Session session = null; Transaction ts = null; try { sf = HibernateUtil.getSessionFactory();//使用单例模式创建Configuration对象和Session工厂 session = sf.getCurrentSession();//保证每个读写线程有唯一的session实例 ts = session.beginTransaction();//创建事务 //Query query=session.createQuery("from User u where u.age between 20 and 30"); Query query=session.createQuery("from User u where u.age >= 20 and u.age



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭