首页 | 源码下载 | 网站模板 | 网页特效 | 广告代码 | 网页素材 | 字体下载 | 书库 | 站长工具
会员投稿 投稿指南 RSS订阅
当前位置:主页>网络编程>java教程>资讯:在Hibernate中直接操作JDBC 接口方法

在Hibernate中直接操作JDBC 接口方法

www.jz123.cn  2010-04-22   来源:   中国建站    责任编辑(袁袁)    我要投递新闻

  在 Hibernate 框架中提供直接操作 JDBC 接口的原因

  Hibernate 框架在处理复杂查询方面的问题

  Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用面向对象编程思维来操纵数据库。Hibernate 的优势在于屏蔽了数据库细节,对于新增修改删除的数据层操作,不再需要跟具体的 SQL 语句打交道,简单的对对象实例进行增删改操作即可。

  但是,对于多表关联、分组统计、排序等复杂的查询功能时,由于 Hibernate 自身的 O-R 映射机制,父子表之间关联取数据会产生大量冗余的查询操作,性能低下。此类情况下,直接使用 JDBC 的 SQL 语句反而更加灵活和高效。

  Hibernate 框架处理复杂查询问题实例分析

  考虑如下数据库实体示例,表 A 为主表,表 B 和表 C 为子表,A 与 B、A 与 C 表均为 1 对多关系,在 B 表和 C 表中以 A_ID 外键字段关联 A 表父记录。

  图 1. 数据库实体示例图

  

在 Hibernate 中直接操作 JDBC 接口

 

  在 Hibernate 框架中,通常采用以下配置方式完成 A 表与 B,C 表父子实体之间的级联查询操作,Hibernate 实体配置 XML 如下:

  清单 1. hibernate 实体配置 xml

  A.hbm.xml:

  <hibernate-mapping>

  <class name="XXX.XXX.A" table="A" >

  <id name="id" type="long">

  <column name="ID"/>

  <generator class="assigned">

  </generator>

  </id>

  <set name="children_B" cascade="delete" inverse="true" lazy="false">

  <key column="A_ID"></key>

  <one-to-many class="XXX.XXX.B"/>

  </set>

  <set name="children_C" cascade="delete" inverse="true" lazy="false">

  <key column="A_ID"></key>

  <one-to-many class="XXX.XXX.C"/>

  </set>

  </class>

  </hibernate-mapping>

  B.hbm.xml:

  <hibernate-mapping>

  <class name="XXX.XXX.B" table="B" >

  <id name="id" type="long">

  <column name="ID"/>

  <generator class="assigned">

  </generator>

  </id>

  <property name="a_id" type="long">

  <column name="A_ID">

  </column>

  </property>

  </class>

  </hibernate-mapping>

  C.hbm.xml

  <hibernate-mapping>

  <class name="XXX.XXX.C" table="C" >

  <id name="id" type="long">

  <column name="ID"/>

  <generator class="assigned">

  </generator>

  </id>

  <property name="a_id" type="long">

  <column name="A_ID">

  </column>

  </property>

  </class>

  </hibernate-mapping>

  对应的 Hibernate 领域实体类代码示例如下:

  清单 2. hibernate 实体类示例

  A.java:

  public class A implements java.io.Serializable,Comparable {

  private long id;

  private Set children_b = new HashSet();

  private Set children_c = new HashSet();

  public A(long id) {

  this.id = id;

  }

  public long getId() {

  return id;

  }

  public void setId(long id) {

  this.id = id;

  }

  public Set getChildern_b() {

  return children_b;

  }

  public void setChildren_b (Set children_b) {

  this.children_b = children_b;

  }

  public Set getChildern_c() {

  return children_c;

  }

  public void setChildren_c (Set children_c) {

  this.children_c = children_c;

  }

  public int compareTo(Object other) {

  A otherSubject = (A)other;

  long curAmount=this.getChildren_b().size()+this.getChildren_c().size();

  long otherAmount =otherSubject.getChildren_b().size()

  + otherSubject.getChildren_c().size();

  if(curAmount

  {

  return -1;

  }

  else if(curAmount>otherAmount)

  {

  return 1;

  }

  else

  {

  return 0;

  }

  }

  }

  B.java:

  public class B implements java.io.Serializable,Comparable {

  private long id;

  private long a_id;

  public long getId() {

  return id;

  }

  public void setId(long id) {

  this.id = id;

  }

  public long getA_id() {

  return a_id;

  }

  public void setA_id(long a_id) {

  this.a_id = a_id;

  }

  public B(long id) {

  this.id=id;

  }

  }

  C.java:

  public class C implements java.io.Serializable,Comparable {

  private long id;

  private long a_id;

  public long getId() {

  return id;

  }

  public void setId(long id) {

  this.id = id;

  }

  public long getA_id() {

  return a_id;

  }

  public void setA_id(long a_id) {

  this.a_id = a_id;

  }

  public C(long id) {

  this.id=id;

  }

  }

上一篇:Java读取xml文件的四种方法 下一篇:Java script基本语法4个关键提问

评论总数:0 [ 查看全部 ] 网友评论


关于我们隐私版权广告服务友情链接联系我们网站地图