理解Hibernate的HQL查询语言
"本文主要介绍了Hibernate中的查询方式,包括HQL(Hibernate Query Language)和Criteria API,以及如何使用它们进行数据库操作。" 在Java开发中,Hibernate作为一个强大的对象关系映射(ORM)框架,简化了数据库操作。它提供了一种抽象层,允许开发者使用面向对象的方式来处理数据库操作。HQL,即Hibernate Query Language,是Hibernate自带的一种查询语言,它是对SQL的面向对象的封装,专门用于在Hibernate中执行查询。 HQL的优势在于它与Java类和对象直接对应,而不是直接操作表和列。例如,在给定的代码片段中,`from Admin as admin where admin.aname = :name` 这个HQL查询语句,相当于SQL中的 `SELECT * FROM Admin WHERE aname = 'name'`,但更贴近于Java编程风格。HQL支持各种复杂的查询,如连接、子查询、聚合函数等,并且可以方便地处理关联对象。 在示例代码中,`query.setString("name", name)` 是设置参数的过程,这里的`:name`在HQL中是占位符,通过`query.setParameter`或`query.setString`来绑定实际的值。`query.list()`执行查询并返回结果集,可以迭代这个结果集来访问查询到的对象。 除了HQL,Hibernate还提供了Criteria API,这是一种更加面向对象的查询方式。Criteria API允许开发者创建动态查询,无需预先编写查询字符串。在给出的代码中,`c.createCriteria(Admin.class)` 创建了一个针对Admin类的Criteria对象,然后通过`c.add(Restrictions.eq("aname", name))` 添加条件,这里的`Restrictions.eq`是定义等于条件的方法。Criteria API同样支持各种条件组合,如大于、小于、等于、不等于,以及逻辑运算符。 最后,不论是使用HQL还是Criteria API,都需要确保在操作完成后关闭Session,以释放资源。在示例代码中,`finally`块中的`s.close()`就是用来关闭Session的。 总结起来,Hibernate提供了HQL和Criteria API两种查询机制,它们都提供了灵活且易于使用的查询接口,使得开发者能够在不直接编写SQL的情况下完成数据库查询。HQL更适合于静态查询,而Criteria API则更适合于动态构建查询条件。在实际开发中,可以根据项目需求和团队习惯选择合适的查询方式。
吧。感觉自己都已经不懂自己了。面对一些人的教导,我很感激。因为很多话都对我有非常大的帮助和
启发,也让我除了做技术,玩编程外,明白了很多道理,也许这就是一个人成熟的过程吧。我真的很希
望我能够忘掉以前的不懂事,忘掉以前的轻狂,踏踏实实的做技术。
自己的“真理”有时也会错,自己的想法有时也很“天真”。我真的很想静一静。晚饭后看了
一个在百度实习的师兄写的一篇日志,觉得写的很棒,明白了高手的一个定义,或者说是一种境界,一种
高深的东西。
我很想从现在做起,使自己能够真正享受编程带来的快乐,没有虚荣,没有竞争,没有杂念。
只有快乐,只有充实,只有无悔。当然我说到做到,那篇日志讲的是一个从点到面,从面到点的哲理。
我觉得有必要写一个hibernate的总结性随笔,从点到面,讲讲hibernate查询的6种方法。分别是HQL查询
,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询。
如果单纯的使用hibernate查询数据库只需要懂其中的一项就可以完成想要实现的一般功能,但是
从一个点,让我们掌握6中方法,则提供了更多选择。每一种方法都有其适用的情况与前提。
HQL查询
HQL是hibernate自己的一套查询语言,于SQL语法不同,具有跨数据库的优点。示例代码:
static void query(String name){
Session s=null;
try{
s=HibernateUtil.getSession();
String hql="from Admin as admin where admin.aname=:name";//使用命名参数,推荐使用,易读。
Query query=s.createQuery(hql);
query.setString("name", name);
List<Admin> list=query.list();
for(Admin admin:list){
System.out.println(admin.getAname());
}
}finally{
if(s!=null)
s.close();
}
}
适用情况:常用方法,比较传统,类似jdbc。缺点:新的查询语言,适用面有限,仅适用于Hibernate框架。
对象化查询Criteria方法:
static void cri(String name,String password){
Session s=null;
try{
s=HibernateUtil.getSession();
剩余7页未读,继续阅读
- 粉丝: 26
- 资源: 37
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 多功能HTML网站模板:手机电脑适配与前端源码
- echarts实战:构建多组与堆叠条形图可视化模板
- openEuler 22.03 LTS专用openssh rpm包安装指南
- H992响应式前端网页模板源码包
- Golang标准库深度解析与实践方案
- C语言版本gRPC框架支持多语言开发教程
- H397响应式前端网站模板源码下载
- 资产配置方案:优化资源与风险管理的关键计划
- PHP宾馆管理系统(毕设)完整项目源码下载
- 中小企业电子发票应用与管理解决方案
- 多设备自适应网页源码模板下载
- 移动端H5模板源码,自适应响应式网页设计
- 探索轻量级可定制软件框架及其Http服务器特性
- Python网站爬虫代码资源压缩包
- iOS App唯一标识符获取方案的策略与实施
- 百度地图SDK2.7开发的找厕所应用源代码分享