javahibernate:Java开源项目Hibernate

  )Hibernate意义

  在个真正OOAD中我们设计首先是做UML建摸最终将个系统涉及所有对象(这个东西不是东西那么简单)用类图来体现个完整设计我们最后可能得到这几种类:控制业务逻辑保存业务数据类module(bean类)辅助类或者更多(具体问题具体分析但是将业务所需数据归结为个类module更适合分层)到数据库低层实现时候

  为了获取数据或者存储数据你不得不为此加上个操作数据库控制逻辑到此你完美设计估计会为此付出巨大努力你看到业务数据层是个复杂模块即使从面向对象观点来看我们UML类图中业务数据层只是个数据模块Hibernate已经帮我们解决了业务数据层这个本来十分复杂模块底层实现现在我们只要在外层裹上我们代表数据类即可

   2)对象模型和关系数据库模型差异

  在写出我初探Hibernate感受的前我觉得写下这节还是很有必要带着问题研究远远比带着好奇研究要意义深远得多

  问题领域:

  关系型数据库是存储数据最好选择但是随着OO技术日益发展在persisitent层上关系型数据库设计体系和OO体系格格不入可以想象当满脑子充斥着OOAD你想到如何隔离满天飞SQL语句时那是多么痛苦表情无论你业务层设计多么完美在真正储存数据或者加载数据时你面对无非是大堆封装好数据这些数据在JDBC中已经完全失去对象(这里对象称的为业务对象或许更为确切)意义你整体OOAD到此为止为什么会造成这种情况呢?原因是对象模型和关系数据库模型根本设计体系的间差别

  对象模型和关系数据库模型各自理论出发点是区别:对象模型理论体系可以简单归结为这两点:

  1) 以对象看待世界

  2) 对象间关系(继承关联聚合组合)维系着整体构成

  而关系数据库模型唯出发点是有效储存数据KEY是数据库关键技术关系在这里只是各个数据表KEY的间关联这种关联我觉得应该称的为数据关联其表达意义远远没有对象的间关联那么深广

  那么我现在最关心问题是hibernate是如何利用关系数据库数据表KEY关联来表达对象的间关系呢?

  在进入正式研究Hbernate的前我们可以思索下问题似乎简单和似乎十分复杂矛盾

  我们设计代表数据层所有类必须完美体现在数据表的中可以这样整理总结:

  -àtable

  1—(关系)---2------〉table1---(关系)-----table2

  问题解决似乎很简单特别是对于javabean构架更是简单(看起来简单而已!!!)

  想象个简单javabean类:

public SimpleBean{
protected id;
protected String name;
public getId{
id;
}
public void Id( id){
this.id=id;
}
public String getName{
name;
}
public void Name(String name){
this,name=name;
}
}
  我们完全可以这样进行name映射:

  Name-àtableName

  propertyNameàcolumnName

  个类例子就是table这个问题很简单得到解决

  再进步,考虑如下简单类关联:

public Class1{
public Class2 2;
public Class2 get2
public void Class2(Class2 2)…
}
public Class2{
public Class1 1;
public Class1 getClass1...
...
}
  这种关系很显然是双向可以从1中得到2反过来也可以从2中得到1那么体现到数据表中呢?首先可以肯定1àtable1,2àtable2;很显然table1和table2都要互相增加多列来保存对方key



  这些简单关系在数据库表关联中得到了很好支持但是稍微复杂呢?

  诸如以下个类:

public S {
ArrayList datas;
Public List getDatas..
Public void Datas(List datas)..
….
}
  这里如果简单用上面所分析propertyname-àColumnName显然不可以这种集合作为bean属性我们该如何在数据表中得到很好体现呢?如果这些集合只是简单String 集合它在数据库表里面是如何表述呢?如果这些集合是保存某些类例子似乎可以转换为数据库表对多关系?

  另外方面继承体系是如何在数据块表里面得到体现呢?继承关系如何用数据库关联关系表达呢?继承所涉及动态类识别如何在数据库中得到体现呢?

  再往深处想对于个操作:

public BookStore{
Set books;
Public Set getBoos..
Public void Books(Set boos)…
Public void addBook(Book book)…
public Book{
public BookStore bookStore;
public Parent getBookStore..
..
}


  在业务逻辑中我们会这样写代码:Book book= Book;
.bookStore.addBooks(book);
  上面两行代码便已经清楚地建立了child和parent的间关系相对来说数据库中数据也应该根据这几行代码建立产生数据并建立这种关联此时内存中数据如何跟数据库中数据致呢?



Tags:  hibernate项目 java开源项目

延伸阅读

最新评论

发表评论