例如对于TUser类
1.实体查询
String hql = " from TUser";
执行这条语句会返回TUser以及TUser子类的纪录。
注: 如果 TUser 类具有外键, 查询会报错!
解决方法: select 别名.属性 from 类 as 别名. 没有别名.属性仍然报错!
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
转自:http://www.examda.com/ncre2/JAVA/fudao/20081229/08103874.html
分享到:
相关推荐
### HQL语法总结:实体查询详解 #### 一、实体查询概述 HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以一种类似于SQL但更接近于面向对象的方式来编写查询。本文将详细介绍HQL中的实体...
3. **实体映射**:Hibernate通过XML文件(hbm.xml)或注解方式定义对象与数据库表的映射关系,包括字段、主键、外键、关联关系等。手册会详细解析这些映射元素的使用。 4. **CRUD操作**:Hibernate提供了简单易用的...
4. **HQL(Hibernate Query Language)**:这是Hibernate提供的面向对象的查询语言,类似于SQL,但更接近于Java的语法。HQL可以用于检索、修改、删除实体,提供了更加灵活的数据查询方式。 5. **Criteria API**:...
4. **建立映射关系**:创建XML映射文件,定义Java类与数据库表的映射规则,包括字段映射、主键策略、外键关系等。 5. **编写访问代码**:利用Hibernate API进行数据库操作,如增加、删除、更新和查询数据。通过...
- **JTA**:Java Transaction API,支持分布式事务。 - **事务传播行为**:定义在有事务上下文环境中如何开始新事务。 #### 6.2 多租户架构 - **Schema隔离**:每个租户拥有自己的模式。 - **Table隔离**:每个租户...
通过这个系列的学习课件,你将全面掌握Hibernate的基础知识和高级技巧,能够自如地在Java项目中应用Hibernate进行数据持久化操作。在实际开发过程中,结合最佳实践和持续学习,你将成为一名熟练的Hibernate开发者。
- **关联与连接**:展示如何在 HQL 中引用实体间的关联。 - **聚合函数**:说明如何在 HQL 中使用聚合函数进行数据汇总。 - **多态查询**:讨论如何编写可以查询继承结构的 HQL。 - **where 子句**:解释如何在 HQL ...
1. **hibernate_training_tree**:这可能是一个关于Hibernate的基础教程或者示例代码库,包括了对Hibernate核心概念、配置、实体映射、事务管理等内容的讲解。学习者可以通过这个树状结构了解Hibernate的整体框架和...
4. **查询语言HQL**:Hibernate Query Language(HQL)是Hibernate提供的面向对象的查询语言,类似于SQL但更接近Java语法。HQL允许我们根据对象属性而不是表字段进行查询,极大地提高了代码的可读性和可维护性。 5....
JDBC:java版本的ODBC JDBC连接数据库的步骤: 1.注册驱动(加载驱动): 注册的方式: 1.使用类加载器(使用反射的方式) Class.forName(driverName); 2.实例化Driver Driver driver = new oracle.jdbc...
在Java开发中,Hibernate是连接Java应用程序与多种数据库(如MySQL和Oracle)的重要桥梁。 首先,让我们深入理解Hibernate的核心概念: 1. **对象关系映射(ORM)**:ORM是将数据库中的表映射为Java类,表中的记录...
### Hibernate基础:注解开发与检索 #### 一、Hibernate注解开发概述 **Hibernate**是一种流行的Java持久层框架,提供了对象关系映射(ORM)的功能,使得Java开发者能够更高效地进行数据库操作。注解作为Java SE 5...
- **使关联工作**:配置关联的级联行为、外键等细节。 - **值类型的集合**:将非实体对象的集合映射到数据库中。 - **双向关联**:建立两个实体之间的双向引用关系,需要注意如何避免循环引用导致的问题。 - **...
3. **实体映射文件编写**:实体映射文件(.hbm.xml或通过注解)用于定义Java类与数据库表之间的映射关系,包括字段、主键策略、外键关联等。 4. **配置文件详解**:`hibernate.cfg.xml`是Hibernate的核心配置文件,...
- **选项b)持久化对象建立关联关系可以跟数据库表建立关系方式是一样的**:虽然表面上看起来相似,但在Hibernate中,对象关联是通过属性来实现的,而数据库中的关联通常依赖于外键,两者在实现机制上有所不同。...
- **RIGHT JOIN:** 直接在HQL中使用`RIGHT JOIN`语法,但由于Hibernate不支持直接的`RIGHT JOIN`语法,可以使用`LEFT JOIN`加上额外的条件来模拟`RIGHT JOIN`的效果: ```java String hql = "FROM UserInfo u ...
- **瞬时状态**:当对象尚未与Hibernate会话建立关联时的状态。 - **持久化状态**:当对象被添加到会话中时的状态。 - **游离状态**:当对象从会话中删除后,但仍存在于应用程序中的状态。 通过这些状态的转换,...
- **HQL(Hibernate Query Language)**:一种面向对象的查询语言,语法接近于SQL,但更侧重于对象操作。 - **Criteria API**:提供了一种基于标准的查询方式,适用于复杂的条件组合查询。 - **Native SQL**:直接...