• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      Hibernate數(shù)據(jù)持久化方法應(yīng)用研究

      2016-04-07 13:32李蘋孫若賢
      電腦知識與技術(shù) 2016年3期
      關(guān)鍵詞:關(guān)聯(lián)校長對象

      李蘋 孫若賢

      摘要:Hibernate可以用映射關(guān)聯(lián)的方法解決面向?qū)ο蠹夹g(shù)與關(guān)系數(shù)據(jù)庫技術(shù)之間不匹配的問題,將應(yīng)用程序中的對象數(shù)據(jù)持久化到關(guān)系數(shù)據(jù)庫中。該文分析了Hibernate的工作原理、CRUD實現(xiàn)技術(shù),給出了關(guān)聯(lián)關(guān)系的映射實例。

      關(guān)鍵詞:Hibernate;數(shù)據(jù)持久化

      中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2016)03-0012-02

      Java程序與關(guān)系數(shù)據(jù)庫通信,可以使用JDBC編程技術(shù),將SQL語句嵌入到Java宿主語言中混合編程,程序中的代碼及SQL語句包含了對象模型與關(guān)系數(shù)據(jù)模型之間的映射關(guān)系。然而,嵌入了SQL語句的Java語言降低了程序的可讀性及獨立性,程序員需要面向?qū)ο笈c面向過程的思維轉(zhuǎn)換。利用Hibernate技術(shù)可以用面向?qū)ο缶幊趟季S來操縱數(shù)據(jù)庫,達到操作對象就是操作數(shù)據(jù)庫的目標,可以把SQL語句從程序代碼中分離出去,實現(xiàn)將內(nèi)存中的一個對象映射成關(guān)系數(shù)據(jù)庫表中一條記錄的持久化操作。

      1 Hibernate的運行原理

      Hibernate是屬于持久化的概念,是將內(nèi)存中的數(shù)據(jù)模型轉(zhuǎn)換為存儲模型,將實體類的定義、類的屬性與數(shù)據(jù)庫中的表和字段映射起來。

      Hibernate通過Configuration類加載配置文件到內(nèi)存,讀取并解析配置文件,讀取并解析映射信息,創(chuàng)建SessionFactory對象。每個SessionFactory類的實例對應(yīng)一個數(shù)據(jù)庫,并負責(zé)創(chuàng)建Session實例。Session負責(zé)管理所有與持久化相關(guān)的CRUD操作。

      2 Hibernate實現(xiàn)CRUD應(yīng)用

      用Hibernate實現(xiàn)對關(guān)系模式:學(xué)生(學(xué)號,姓名,性別)的持久化操作,步驟如下:

      (1)配置hibernate.cfg.xml文件,用于存放連接數(shù)據(jù)庫的有關(guān)信息。

      root123456com.mysql.jdbc.Driverjdbc:mysql:///hibernateorg.hibernate.dialect.MySQLDialect

      ……

      (2)創(chuàng)建持久化類,將Java對象永久保存在數(shù)據(jù)庫中,當程序再次運行時重新加載到內(nèi)存,并重新構(gòu)造出對象。創(chuàng)建一個與學(xué)生表相關(guān)的持久化類,代碼如下:

      public class Student {

      private Integer sid;

      private String sno;

      private String sname;

      private String ssex;

      public Integer getSid() {

      return sid; }

      public void setSid(Integer sid) {

      this.sid = sid; }

      public String getSno() {

      return sno; }

      public void setSno(String sno) {

      this.sno = sno; }

      public String getSname() {

      return sname; }

      public void setSname(String sname) {

      this.sname = sname; }

      public String getSsex() {

      return ssex; }

      public void setSsex(String ssex) {

      this.ssex = ssex; }}

      (3)創(chuàng)建擴展名為hbm.xml的 XML文件來指定對象和關(guān)系數(shù)據(jù)之間的映射關(guān)系,在運行時,Hibernate將根據(jù)這個映射文件,將Student類映射到STUDENT表。

      (4)CRUD操作

      調(diào)用Session的save()方法,把對象持久化到數(shù)據(jù)庫中,相當于對表執(zhí)行INSERT操作。調(diào)用createQuery()方法對數(shù)據(jù)庫進行查詢,相當于對表上執(zhí)行SELECT操作。調(diào)用get()方法加載對象,可以修改對象的屬性,相當于對表執(zhí)行UPDATE操作。調(diào)用delete()方法刪除參數(shù)指定的對象,相當于對表執(zhí)行DELETE操作。

      3 Hiberbate映射實體關(guān)聯(lián)關(guān)系應(yīng)用

      在數(shù)據(jù)持久化操作中,存在實體關(guān)聯(lián)關(guān)系的映射,可以將數(shù)據(jù)庫中的一對一、一對多、多對多聯(lián)系映射到具體的對象操作中。實例如下:

      關(guān)系模式學(xué)校(學(xué)校編號,名稱)與校長(校長編號,姓名)存在一對一的聯(lián)系,表明一所學(xué)校只有一個校長,一個校長只有在一所學(xué)校任職??梢圆捎没谕怄I的雙向一對一關(guān)聯(lián)映射。在創(chuàng)建的學(xué)校實例類中加入校長編號屬性,在校長類中加入學(xué)校編號屬性。并實現(xiàn)該屬性的setXxx()和getXxx()方法,分別用來獲取關(guān)聯(lián)和設(shè)置關(guān)聯(lián)的對象,即可以從學(xué)校查詢到校長,也可以從校長查詢到任職學(xué)校。在校長類的對象關(guān)系映射文件中通過many-to-one元素映射學(xué)校編號屬性,指定unqiue的屬性為true,表示校長實體到學(xué)校實體的一對一聯(lián)系。在學(xué)校類的對象映射文件中通過one-to-one元素映射從學(xué)校實體到校長實體的一對一關(guān)系。

      關(guān)系模式學(xué)生(學(xué)號,姓名,性別)與班級(班級號,班級名)存在多對一的聯(lián)系,表明一個學(xué)生只能在一個班級,一個班級可以有多個學(xué)生??捎秒p向一對多關(guān)系映射。在班級類中定義集合類型的屬性,用來存儲學(xué)生對象,在學(xué)生類中定義班級類的屬性。在學(xué)生類的對象映射文件中用many-to-one元素指定被關(guān)聯(lián)的類的屬性為班級,外鍵為班級號。在班級類的對象映射文件中用one-to-many元素映射學(xué)生類,用集合的方式進行屬性設(shè)置。

      關(guān)系模式課程(課程,課程名)與學(xué)生存在多對多的聯(lián)系,表明一個學(xué)生可以選多門課程,一門課程可以有多個學(xué)生選修??捎秒p向多對多關(guān)聯(lián)映射。在學(xué)生類中定義集合類型的課程屬性,用來存儲課程類對象。在課程類中定義集合類型的學(xué)生屬性,用來存儲學(xué)生類對象。在學(xué)生類的對象映射文件中用many-to-many元素指定被關(guān)聯(lián)的類的屬性為班級,用set元素映射集合屬性課程。在班級類的對象映射文件中用many-to-many元素指定被關(guān)聯(lián)的類的屬性為學(xué)生,用set元素映射集合屬性學(xué)生。

      4 結(jié)束語

      使用Hibernate技術(shù),程序員可以用面向?qū)ο蟮姆椒ㄔL問數(shù)據(jù)庫,使數(shù)據(jù)的管理和操作相分離,提高開發(fā)效率。

      參考文獻:

      [1] 許勇,王黎.Struts 2+Hibernate+Spring整合開發(fā)深入剖析與落伍應(yīng)用[M].北京:清華大學(xué)出版社,2013.

      [2] 王國輝,馬文強.Hibernate應(yīng)用開發(fā)完全手冊[M].北京:人民郵電出版社,2007.

      [3] 工業(yè)和信息化部人才交流中心藍橋杯軟件大賽專家委員會.使用Hibernate框架輕松連接數(shù)據(jù)庫[M].北京:電子工業(yè)出版社,2013.

      [4] 孫衛(wèi)琴.Hibernate逍遙游記[M].北京:電子工業(yè)出版社,2010.

      猜你喜歡
      關(guān)聯(lián)校長對象
      神秘來電
      不懼于新,不困于形——一道函數(shù)“關(guān)聯(lián)”題的剖析與拓展
      “一帶一路”遞進,關(guān)聯(lián)民生更緊
      奇趣搭配
      智趣
      基于熵的快速掃描法的FNEA初始對象的生成方法
      區(qū)間對象族的可鎮(zhèn)定性分析
      論校長的修養(yǎng)
      好校長是怎么煉就的?
      校長給力“九個一”
      防城港市| 定襄县| 徐汇区| 绵竹市| 运城市| 娄底市| 汽车| 镇赉县| 耒阳市| 永宁县| 呈贡县| 博乐市| 稷山县| 繁昌县| 开封市| 中方县| 蓬莱市| 如东县| 芦溪县| 海阳市| 霍州市| 苏尼特右旗| 确山县| 安岳县| 九龙坡区| 泸溪县| 松溪县| 沭阳县| 梨树县| 大兴区| 乌兰县| 靖西县| 巨野县| 安图县| 密山市| 西乌| 昌都县| 永兴县| 南京市| 双柏县| 鸡西市|