您现在的位置是:首页 >

S/O Hibernate O/R映射三大基本定则

火烧 2022-04-11 08:11:53 1053
Hi er ate O/R映射三大基本定则   引言  在Java环境下 有多种对象关系映射方法 如实体Bea OJB JDO JDBC等 Hi er ate是一种新的O/R映射工具 它不仅提供了从J

Hibernate O/R映射三大基本定则  

  引言

  在Java环境下 有多种对象关系映射方法 如实体Bean OJB JDO JDBC等 Hibernate是一种新的O/R映射工具 它不仅提供了从Java类到数据表的映射 也提供了数据查询和恢复等机制 Hibernate非常简单易学 目前国内有很多同行已经或正在用Hibernate开发实施项目 但Hibernate有很多规则不为人知或应用甚少 本文的目的就是将这些规则归纳总结 希望对您的开发和设计有益

  首先声明 本文是Hibernate入门级文章 高手请不用往下看了

  基本定则

  定则一 数据库配置文件名称可以不是Hibernate properties或Hibernate cfg xml

  由于Hibernate官方文档(本文指的文档)的影响 很多Hibernate开发者误以为系统一定要有名称为Hibernate properties或Hibernate cfg xml的文件 而且一定要放在classes的根目录下 实际上 该文件只是一般的配置文件 名称可以自己取 文件位置可以自己定 而且在多数据库环境下 可以有多个配置文件 使得程序可以连接多个数据库 只是您在创建会话工厂时需要特殊处理 代码示例如下

  //配置文件名称

  protected static String CONFIG_FILE = nfig

  //配置文件目录 可以考虑在该目录下存放系统所有配置文件 此处使用虚拟机参数

  String configPath = System getProperty( nfig )

  //创建会话工厂

  sessionFactory =( new Configuration() configure(new File(configPath+File separator+CONFIG_FILE))) buildSessionFactory()

  定则二 小型项目中 hbm xml文件可以合并到一个文件中

  同样由于Hibernate官方文档的影响 很多Hibernate开发者误以为Hibernate的对象关系映射一定要一个表对应一个对象 并将映射文件和对象文件放在同一目录下 实际上 该模式是为规范性考虑而设计的 因为在多人参与的项目中 多人要维护同一文件容易产生冲突 当项目比较小时 配置文件的维护人员少 我们完全可以将 hbm xml文件合并到一个或者几个文件中 依据作者本人的项目设计开发经验 最好是项目中有几人同时从事O/R映射和持久工作 则设定几个 hbm xml文件 每人维护一个 当然 为了便于分类和管理 每人的工作应该按逻辑划分

  大型项目中的文件配置示例如下

  

  <hibernate configuration>

  <session factory>

  <!—映射文件分散 >

  <mapping resource= /hongsoft/test/ persistence/Cat hbm xml />

  <mapping resource= /hongsoft/test/ persistence/Animal hbm xml />

  </session factory>

  </hibernate configuration>

  小型项目中的文件配置示例如下

  

S/O Hibernate O/R映射三大基本定则

  <hibernate configuration>

  <session factory>

  <!—映射文件集中 >

  <mapping resource= res_hibernate_map xml />

  </session factory>

  </hibernate configuration>

  要注意的是 从对Hibernate源代码的分析可知 指定映射文件时 不能用绝对目录 只能用相对目录 而且 系统以classes根目录为当前目录

  定则三 对象关系映射是以 hbm xml文件为基准的 而不是以PO文件为基准

  该定律的意思是 系统启动检查您的对象关系映射是否正确时 是以 hbm xml为基准来进行检查的 对象文件的property可以比映射文件的property多 但不能少 如果您有如下的映射

  

  <class name= hongsoft test User table= res_user >

  <id name= id column= id type= long unsaved value= any >

  <generator class= assigned >

  </generator>

  </id>

  <property name= name />

  <property name= loginName />

  <property name= passwd />

  </class>

  系统启动 检查数据库和其他配置正确后 将以该文件为基准 首先检查User对象中有无id属性和对应的get/set方法 如果没有则报错 如果有且正确则检查有无name属性和对应的get/set方法…… 直到文件结束 要注意的是 如果属性为name 则get方法名称必须为getName() set方法名称必须为setName() 否则会报错

  如果User对象除了有id name loginName passwd四个属性和对应的方法 还有其它的属性和方法 会报错吗?不会 因为对象关系映射是以 hbm xml文件为基准的 而不是以PO文件为基准 您在项目中可以充分利用该特点 实现您自己的比较特殊的需求 例如 您可以在User对象中加入updatedPasswd表示更改后的口令 由此构造在表示层要使用的FormBean和在业务层要使用的ValueObject 当然 这样做也有缺点 需要根据您的实际情况而定

  总结

lishixinzhi/Article/program/Java/ky/201311/28062  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码