服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

关于ojb和hibernate框架的评议


  ojb和hibernate是我用过两个o/r mapping框架,附带说一句,我用ojb比hibernate的时间长多了,因此对hibernate的了解不深,因此有一些看法可能会有误。
  
  备注: ojb网址 http://jakarta.apache.org/ojb
  
  ojb和hibernate的机制基本上是样,没有多的区别,包括代理,约束,引用等, 都可以使用类sql语句,ojb用oql,hibernate用hql,也可以设置查询类,如,
  
  不过 我两者在一个很大的设计的区别。
  
  就是说数据填充上的设计
  
  如
  
  class user
  {
  private string name;
  
  public void setname(string r_name)
  {
  name=r_name;
  }
  
  public string getname()
  {
  return name;
  }
  }
  
  ojb用下列描述符
  
  ojb的引擎将数据库填充到对象时是使用reflection来设置name这个字段,有些象user.name=...
  
  将对象中的数据保存到数据库时,也是这样
  
  hiberate用下列描述符
  
  hibernate的引擎将数据库填充到对象时是使用reflection来设置name这个属性,即调用user.setname(...);
  
  将对象中的数据保存到数据库时,调用user.getname();
  
  (我一向把property看作带操作的field.)
  
  想来 设计者分别采用这种方式,应该有各自的理由,但我个人还是比较喜欢ojb的方式。
  
  原因如下
  
  实体类应该只代表数据库,通过field就可以,使用property进行访问,只是避免以后可能的改动,或者实体类不是单纯的实体类,可以带些简单的业务模型意义里面。因此用field可能会更好一些。
  
  比如说 用ojb的话类可能象这样,getstate返回string,给用户查看,如"冻结帐户","新注册用户"
  
  class user
  {
  private string name;
  private int state;
  
  public void setname(string r_name)
  {
  name=r_name;
  }
  
  public string getname()
  {
  return name;
  }
  
  public void setstate(int r_state)
  {
  state=r_state;
  }
  
  public string getstate()
  {
  if(...)
  return ...;
  else
  return ...
  }
  }
  
  用hibernate的类象这样
  
  class user
  {
  private string name;
  private int state;
  
  public void setname(string r_name)
  {
  name=r_name;
  }
  
  public string getname()
  {
  return name;
  }
  
  public void setstate(int r_state)
  {
  state=r_state;
  }
  
  public void getstate()
  {
  return state;
  }
  
  public string getstatestring()
  {
  if(...)
  return ...;
  else
  return ...
  }
  }
  
  我总是觉得ojb的看起来更顺眼一些
  
  当然我不是说hibernate不好
  
  不过在一般的中小型程序中,很少有纯粹的实体类,多多少少都带了一点业务,或者因为其它原因,如上面的原因,ojb可能会有点优秀。

扫描关注微信公众号