`
yianpuodiaotu
  • 浏览: 237628 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

HQL 语言基本用法

    博客分类:
  • JEE
阅读更多

1.实体查询
String hql = " from TUser";

执行这条语句会返回TUser以及TUser子类的纪录。

hql = "from java.lang.Object"
会返回数据库 中所有库表的纪录。

where 语句
hql = "from TUser as user where user.name='yyy'";

其中,as可以省略也一样
hql = "from TUser user where user.name='yyy'";

where子句中,我们可以通过比较运算符设定条件,如:
=, <>, >, <, >=, <=, between, not between, in, not in, is, like等。

2.属性查询
List list = session.createQuery("select user.name, user.age from TUser as user").list();

还可以在HQL中动态构造对象实例的方法,将数据封装。
List list = session.createQuery("select new TUser(user.name, user.age) from TUser as user").list();
Iterator it = list.iterator();
while(it.hasNext() ) {
TUser user = (TUser)it.next();
System.out.println(user.getName());
}
但是要注意这里的TUser对象只是对name和age属性的封装,其他状态均未赋值,所以不能用它来进行更新操作。

也可以在HQL的Select子句中使用统计函数
"select count(*) ,min(user.age) from TUser as user"

也可以使用distinct关键字来删除重复纪录。
select distinct user.name from TUser as user;

3.实体的更新与删除
hibernate 2中需要先查询出实体,设置属性后再保存。

hibernate 3中,提供了更灵活的方式(bulk delete/update)
更新:
Query query = session.createQuery("update TUser set age=18 where id=1");
query.executeUpdate();
删除:
session.createQuery("delete TUser where age>=18");
query.executeUpdate();

4.分组与排序
Order by子句:
from TUser user order by user.name, user.age desc
Group by子句和Having子句
"select count(user), user.age from TUser user group by user.age having count(user)>10"

5.参数邦定
通过顺序占位符?来填充参数:
1)hibernate 2 中通过session.find方法来填充
session.find("from TUser user where user.name=?", "Erica", Hibernate.STRING);
多个参数的情况:
Object[] args = new Object[] {"Erica", new Integer(20)};
Type[] types = new Type{Hibernate.STRING, Hibernate.INTEGER};
session.find("from TUser user where user.name=? and user.age=?", args, types);

2)通过Query接口进行参数填充:
Query query = session.createQuery("from TUser user where user.name=? and user.age>?");
query.setString(0,"Erica");
query.setInteger(1, 20);

通过引用占位符来填充参数:
String hql = "from TUser where name=:name";
Query query = session.createQuery(hql);
query.setParameter("name","Erica");

甚至可以将查询条件封装为一个JavaBean
class UserQuery {
private String name;
private Integer age;
//getter and setter
}
String hql = "from TUser where name=:name and age=:age";
Query query = session.createQuery(hql);
UserQuery uq = new UserQuery();
uq.setName("Erica");
uq.setAge(new Integer(20));

query.setProperties(uq); //会调用里面的getter?
query.iterate();

6.联合查询
也可以使用 inner join,left outer join, right out join, full join
排列组合:form TUser, TAddress

分享到:
评论

相关推荐

    Java语言基础下载

    使用DDL,DML语言对数据库进行基本操作 338 查询数据库里的数据 339 预编译语句(PreparedStatement) 340 使用事务 341 事务的级别控制 343 使用存储过程 345 操作元数据 347 ResultSetMetaData(结果集元数据) 349...

    Querydsl中文文档翻译.pdf

    Querydsl最先支持的是Hibernate的HQL语言, 现如今, Querydsl已经支持JPA, JDO, JDBC, Lucene, Hibernate Search, MangoDB, Collections 和 RDF(Relational Data Format) Bean作为后端。 1.2. 原则 类型安全...

    2023Java高频面试题

    Java集合框架:常用的List、Set、Map等集合类及其实现方式、使用场景、遍历方法等。 异常处理:Java中的异常类型、异常处理机制、如何自定义异常等。 IO流:Java中常用的文件读写、序列化和反序列化等操作。 多线程...

    antlr4权威指南

    Hibernate对象-关系映射框架(ORM)使用ANTLR来处理HQL语言。  除了这些鼎鼎大名的项目之外,还可以利用ANTLR构建各种各样的实用工具,如配置文件读取器、遗留代码转换器、维基文本渲染器,以及JSON解析器。我编写...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  2.4.1 Hibernate的核心接口  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  2.4.1 Hibernate的核心接口  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  2.4.1 Hibernate的核心接口  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  2.4.1 Hibernate的核心接口  ...

    Grails 技术精解与Web开发实践【源码+样章】----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    17.3.4 使用方法对象 216 17.3.5 为某一特定的实例 添加方法 217 17.4 本章小结 218 第18章 Grails插件开发 219 18.1 创建与发布插件 219 18.2 插件能做什么 221 18.2.1 添加Spring配置信息 223 18.2.2 与Spring...

    Grails权威指南

     4.6.1 使用get方法和exists方法进行基本查询  4.6.2 列举(listing),70排序(sorting)以及合计(counting)  4.6.3 用动态查找器(finder)查询  4.6.4 使用hql进行查询  4.6.5 按样本...

    云计算第二版

    9.4 CloudSim的使用方法 274 9.4.1 环境配置 274 9.4.2 运行样例程序 274 9.5 CloudSim的扩展 277 9.5.1 调度策略的扩展 277 9.5.2 仿真核心代码 280 9.5.3 平台重编译 286 习题 287 参考文献 287 第10章 云计算...

    低清版 大型门户网站是这样炼成的.pdf

    5.1.10 使用hibernate的isinitialized()与initialize()方法 277 5.1.11 持久化对象间的级联操作 277 5.2 hibernate的检索策略 291 5.2.1 立即检索 291 5.2.2 延迟检索 296 5.2.3 迫切左外连接检索 300 5.3 hql...

    Java Web程序设计教程

    4.1.3sql使用方法 65 4.2jdbc 67 4.2.1jdbc概述 67 4.2.2jdbc驱动程序 68 4.2.3使用jdbc读取数据 69 4.3项目实战——存储图书信息 73 本章小结 78 课后练习 79 第5章struts2框架基础 80 5.1mvc框架 80 ...

    JBPM4工作流应用开始指南.rar

    209 10.3 如何在活动中调用EJB方法 214 10.4 使用jms活动 215 10.4.1 模拟JMS服务 217 10.4.2 JMS文本消息 219 10.4.3 JMS Object消息 220 10.4.4 JMS Map消息 222 10.5 历史会话监听链 223 10.6 自定义Web任务表单 ...

    ARCH4系统开发指南

    2.26.3 异常类的使用方法 67 2.26.3.1 ExceptionCause 67 2.26.3.2 BusinessException和PermissionException 67 2.26.3.3 DataVerifyException 68 2.26.3.4 ExceptionHelper 68 2.26.3.5 应用服务器异常 69 2.27 ...

    支持多数据库的ORM框架ef-orm.zip

    框架的API设计直接面向数据库操作,不绕弯子,开发者只需要数据库基本知识,不必学习大量新的操作概念即可使用API完成各种DDL/DML操作。 最大限度利用编译器减少编码错误的可能性 API设计和元数据模型(meta-model...

    java web技术开发大全(最全最新)

    Hibernate(会话、映射、标准查询API、HQL、事务管理、锁等)。除此之外,《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》还提供了两个完整的实例来讲解开发SSH的详细步骤和方法。通过对这两个...

    NHibernate参考文档 2.0.0 chm

    4.1.4. 使用非不可继承的(non-sealed)类以及虚方法(virtual methods) (可选) 4.2. 实现继承(Inheritance) 4.3. 实现 Equals() 和 GetHashCode() 方法 4.4. 持久化生命周期(Lifecycle)中的回调(Callbacks)...

Global site tag (gtag.js) - Google Analytics