`
lifan51777
  • 浏览: 15832 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JAVA基础:Hibernate外键关联与HQL语法

阅读更多

例如对于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语法总结:实体查询详解 #### 一、实体查询概述 HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以一种类似于SQL但更接近于面向对象的方式来编写查询。本文将详细介绍HQL中的实体...

    Hibernate_3.2中文手册(chm+pdf)

    3. **实体映射**:Hibernate通过XML文件(hbm.xml)或注解方式定义对象与数据库表的映射关系,包括字段、主键、外键、关联关系等。手册会详细解析这些映射元素的使用。 4. **CRUD操作**:Hibernate提供了简单易用的...

    hibernate5.0jar包

    4. **HQL(Hibernate Query Language)**:这是Hibernate提供的面向对象的查询语言,类似于SQL,但更接近于Java的语法。HQL可以用于检索、修改、删除实体,提供了更加灵活的数据查询方式。 5. **Criteria API**:...

    Java_Web--Hibernate3技术详解

    4. **建立映射关系**:创建XML映射文件,定义Java类与数据库表的映射规则,包括字段映射、主键策略、外键关系等。 5. **编写访问代码**:利用Hibernate API进行数据库操作,如增加、删除、更新和查询数据。通过...

    hibernate视频

    - **JTA**:Java Transaction API,支持分布式事务。 - **事务传播行为**:定义在有事务上下文环境中如何开始新事务。 #### 6.2 多租户架构 - **Schema隔离**:每个租户拥有自己的模式。 - **Table隔离**:每个租户...

    hibernate学习课件

    通过这个系列的学习课件,你将全面掌握Hibernate的基础知识和高级技巧,能够自如地在Java项目中应用Hibernate进行数据持久化操作。在实际开发过程中,结合最佳实践和持续学习,你将成为一名熟练的Hibernate开发者。

    hibernate3.6 文档(pdf 格式)

    - **关联与连接**:展示如何在 HQL 中引用实体间的关联。 - **聚合函数**:说明如何在 HQL 中使用聚合函数进行数据汇总。 - **多态查询**:讨论如何编写可以查询继承结构的 HQL。 - **where 子句**:解释如何在 HQL ...

    hibernate学习资料

    1. **hibernate_training_tree**:这可能是一个关于Hibernate的基础教程或者示例代码库,包括了对Hibernate核心概念、配置、实体映射、事务管理等内容的讲解。学习者可以通过这个树状结构了解Hibernate的整体框架和...

    学习hibernate的第二章

    4. **查询语言HQL**:Hibernate Query Language(HQL)是Hibernate提供的面向对象的查询语言,类似于SQL但更接近Java语法。HQL允许我们根据对象属性而不是表字段进行查询,极大地提高了代码的可读性和可维护性。 5....

    jdbc基础和参考

    JDBC:java版本的ODBC JDBC连接数据库的步骤: 1.注册驱动(加载驱动): 注册的方式: 1.使用类加载器(使用反射的方式) Class.forName(driverName); 2.实例化Driver Driver driver = new oracle.jdbc...

    hibernate和数据库的各种包

    在Java开发中,Hibernate是连接Java应用程序与多种数据库(如MySQL和Oracle)的重要桥梁。 首先,让我们深入理解Hibernate的核心概念: 1. **对象关系映射(ORM)**:ORM是将数据库中的表映射为Java类,表中的记录...

    hibernate基础 注解开发 检索

    ### Hibernate基础:注解开发与检索 #### 一、Hibernate注解开发概述 **Hibernate**是一种流行的Java持久层框架,提供了对象关系映射(ORM)的功能,使得Java开发者能够更高效地进行数据库操作。注解作为Java SE 5...

    hibernate说明文档

    - **使关联工作**:配置关联的级联行为、外键等细节。 - **值类型的集合**:将非实体对象的集合映射到数据库中。 - **双向关联**:建立两个实体之间的双向引用关系,需要注意如何避免循环引用导致的问题。 - **...

    hibernate中文ppt详解配置

    3. **实体映射文件编写**:实体映射文件(.hbm.xml或通过注解)用于定义Java类与数据库表之间的映射关系,包括字段、主键策略、外键关联等。 4. **配置文件详解**:`hibernate.cfg.xml`是Hibernate的核心配置文件,...

    Hibernate 练习题

    - **选项b)持久化对象建立关联关系可以跟数据库表建立关系方式是一样的**:虽然表面上看起来相似,但在Hibernate中,对象关联是通过属性来实现的,而数据库中的关联通常依赖于外键,两者在实现机制上有所不同。...

    Hibernate问题解决

    - **RIGHT JOIN:** 直接在HQL中使用`RIGHT JOIN`语法,但由于Hibernate不支持直接的`RIGHT JOIN`语法,可以使用`LEFT JOIN`加上额外的条件来模拟`RIGHT JOIN`的效果: ```java String hql = "FROM UserInfo u ...

    hibernate学习笔记

    - **瞬时状态**:当对象尚未与Hibernate会话建立关联时的状态。 - **持久化状态**:当对象被添加到会话中时的状态。 - **游离状态**:当对象从会话中删除后,但仍存在于应用程序中的状态。 通过这些状态的转换,...

    HIBERNATE中文参考文档

    - **HQL(Hibernate Query Language)**:一种面向对象的查询语言,语法接近于SQL,但更侧重于对象操作。 - **Criteria API**:提供了一种基于标准的查询方式,适用于复杂的条件组合查询。 - **Native SQL**:直接...

Global site tag (gtag.js) - Google Analytics