成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 后端
Hibernate是一種新的O/R映射工具,它不僅提供了從Java類到數據表的映射,也提供了數據查詢和恢復等機制。本文是作者對Hibernate映射中容易理解錯誤的知識點的歸納總結,希望對你有幫助。

引言

在Java環境下,有多種對象關系映射方法,如實體Bean、OJB、JDO、JDBC等。Hibernate是一種新的O/R映射工具,它不僅提供了從Java類到數據表的映射,也提供了數據查詢和恢復等機制。Hibernate非常簡單易學,目前國內有很多同行已經或正在用Hibernate開發實施項目;但Hibernate有很多規則不為人知或應用甚少。本文的目的就是將這些規則歸納總結,希望對您的開發和設計有益。

首先聲明,本文是Hibernate入門級文章,高手請不用往下看了。

基本定則

定則一:數據庫配置文件名稱可以不是Hibernate.properties或Hibernate.cfg.xml

由于Hibernate官方文檔(本文指www.hibernate.org的文檔)的影響,很多Hibernate開發者誤以為系統一定要有名稱為Hibernate.properties或Hibernate.cfg.xml的文件,而且一定要放在classes的根目錄下。實際上,該文件只是一般的配置文件,名稱可以自己取,文件位置可以自己定,而且在多數據庫環境下,可以有多個配置文件,使得程序可以連接多個數據庫。只是您在創建會話工廠時需要特殊處理,代碼示例如下:

//配置文件名稱
protected static String CONFIG_FILE = "my_hibernate.config";
//配置文件目錄,可以考慮在該目錄下存放系統所有配置文件,此處使用虛擬機參數
String configPath = System.getProperty("my.config"); 
//創建會話工廠   
sessionFactory =( new Configuration().configure(new File(configPath+File.sep
arator+CONFIG_FILE))) .buildSessionFactory();

定則二:小型項目中,.hbm.xml文件可以合并到一個文件中

同樣由于Hibernate官方文檔的影響,很多Hibernate開發者誤以為Hibernate的對象關系映射一定要一個表對應一個對象,并將映射文件和對象文件放在同一目錄下。實際上,該模式是為規范性考慮而設計的,因為在多人參與的項目中,多人要維護同一文件容易產生沖突;當項目比較小時,配置文件的維護人員少,我們完全可以將.hbm.xml文件合并到一個或者幾個文件中。依據作者本人的項目設計開發經驗,最好是項目中有幾人同時從事O/R映射和持久工作,則設定幾個.hbm.xml文件,每人維護一個。當然,為了便于分類和管理,每人的工作應該按邏輯劃分。

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

<hibernate-configuration>
<session-factory>
<!—映射文件分散 -->
<mapping resource="com/hongsoft/test/ persistence/Cat.hbm.xml"/>
<mapping resource="com/hongsoft/test/ persistence/Animal.hbm.xml"/>
</session-factory>
</hibernate-configuration>
小型項目中的文件配置示例如下:
<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="com.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。當然,這樣做也有缺點,需要根據您的實際情況而定。

【編輯推薦】

  1. 淺析Hibernate下數據批量處理方法
  2. 別讓Hibernate偷走了你的標識符
  3. 淺談JSP下的Hibernate分頁技術
責任編輯:楊鵬飛 來源: Java吧
相關推薦

2009-09-23 13:21:32

Hibernate O

2012-03-19 16:27:05

JavaHibernate

2012-02-02 16:13:29

HibernateJava

2009-09-22 15:10:22

Hibernate映射

2009-09-23 17:34:18

Hibernate映射

2009-09-25 10:00:47

Hibernate映射

2012-02-03 11:17:33

HibernateJava

2012-02-03 10:07:04

HibernateJava

2009-06-02 14:46:26

Hibernate關系映射教程

2015-05-05 11:06:02

JavaJava框架Struts+Hibe

2009-09-23 13:26:10

Hibernate對象

2009-09-25 12:31:13

Hibernate映射

2009-09-25 14:20:28

Hibernate繼承映射

2009-09-25 09:46:02

Hibernate高級

2009-09-25 12:59:52

Hibernate映射

2009-09-27 10:02:29

定制Hibernate

2009-09-28 14:54:33

Hibernate映射

2009-09-29 15:58:22

Hibernate映射

2009-09-25 14:12:16

Hibernate繼承

2009-06-16 14:36:54

Hibernate繼承
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线观看欧美日韩视频 | 九九热免费视频在线观看 | 欧美日韩免费一区二区三区 | 日韩三区在线观看 | av永久免费 | 亚洲国产一区二区视频 | 国产三级网站 | 精品国产乱码久久久久久影片 | 国产精品18毛片一区二区 | 五月婷六月丁香 | 国产精品久久在线 | 欧美日韩在线一区 | 亚洲一区二区三区四区五区中文 | 天天综合网天天综合 | 欧美一级精品片在线看 | 日韩精品视频在线播放 | 日韩欧美视频 | 亚洲精品一区二区三区 | 五月婷婷激情网 | 午夜精品一区二区三区在线视频 | 欧美xxxx在线 | 欧美久久久电影 | 国产亚洲精品成人av久久ww | 日本电影韩国电影免费观看 | 日韩免费福利视频 | 一区二区三区欧美在线观看 | 天天夜夜操 | 中文字幕乱码视频32 | 亚洲精品日韩在线 | 久久看看 | 91视频导航 | 涩涩视频在线播放 | gav成人免费播放视频 | 精品国产一区二区国模嫣然 | 91精品在线观看入口 | 一a一片一级一片啪啪 | 草草视频在线播放 | 欧美高清性xxxxhd | 91久久精品国产免费一区 | 91精品国产自产在线老师啪 | 欧美美女爱爱视频 |