日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate4实战 之 第一部分 Hibernate入门

發布時間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate4实战 之 第一部分 Hibernate入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一部分:Hibernate入門

Hibernate是什么 Hibernate是一個輕量級的ORMapping框架 ORMapping原理(Object Relational Mapping) ORMapping基本對應規則: 1:類跟表相對應 2:類的屬性跟表的字段相對應 3:類的實例與表中具體的一條記錄相對應 4:一個類可以對應多個表,一個表也可以對應對個類 5:DB中的表可以沒有主鍵,但是Object中必須設置主鍵字段 6:DB中表與表之間的關系(如:外鍵)映射成為Object之間的關系? 7:Object中屬性的個數和名稱可以和表中定義的字段個數和名稱不一樣 ORMapping的基本實現方式: 使用JDBC,用SQL來操作數據庫,只是看動態生成還是人工寫代碼來實現。 大家想想,我們實現過ORMapping嗎? Hibernate能干什么: Hibernate主要用來實現Java對象和表之間的映射,除此之外還提供還提供數據查詢和獲取數據的方法,可以大幅度減少開發時人工使用SQL和JDBC處理數據的時間。 Hibernate的目標是對于開發者通常的數據持久化相關的編程任務,解放其中的95%。對于以數據為中心的程序來說,它們往往只在數據庫中使用存儲過 程來實現商業邏輯,Hibernate可能不是最好的解決方案;對于那些在基于Java的中間層應用中,它們實現面向對象的業務模型和商業邏輯的應 用,Hibernate是最有用的。 Hibernate可以幫助你消除或者包裝那些針對特定廠商的SQL代碼,并且幫你把結果集從表格式的表示形式轉換到一系列的對象去。 一個非常簡要的Hibernate體系結構的高層概要圖 Hibernate運行時體系結構 “最小”的體系結構方案,要求應用程序提供自己的 JDBC 連接并管理自己的事務。這種方案使用了Hibernate API 的最小子集. “全面解決”的體系結構方案,將應用層從底層的JDBC/JTA API中抽象出來,而讓Hibernate來處理這些細節。 SessionFactory (org.hibernate.SessionFactory) 針對單個數據庫映射關系經過編譯后的內存鏡像,是線程安全的(不可變)。 它是生成Session的工廠,本身要用到ConnectionProvider。 Session (org.hibernate.Session) 表示應用程序與持久儲存層之間交互操作的一個單線程對象,此對象生存期很短,隱藏了JDBC連接,也是Transaction的工廠。 Transaction (org.hibernate.Transaction) 應用程序用來指定原子操作單元范圍的對象,它是單線程的,生命周期很短。它通過抽象將應用從底層具體的JDBC、JTA以及CORBA事務隔離開。 ConnectionProvider (org.hibernate.connection.ConnectionProvider) 生成JDBC連接的工廠(有連接池的作用)。它通過抽象將應用從底層的Datasource或DriverManager隔離開。僅供開發者擴展/實現用,并不暴露給應用程序使用。 TransactionFactory (org.hibernate.TransactionFactory) 生成Transaction對象實例的工廠。僅供開發者擴展/實現用,并不暴露給應用程序使用。 HelloWorld 要研究怎么做,先得搞清楚需要做什么 根據剛才的學習,做基本的Hibernate應用程序,要完成下面的工作:Object、數據庫的表、兩種配置文件、客戶端程序來調用Hibernate的接口進行操作。 構建環境 最簡單的方法:把hibernate-release-4.0.0.Beta4.zip包里面lib/required下的jar包全部添加到工程的 library里面,另外還需添加slf4j的實現包slf4j-log4j12-1.5.8.jar和log4j的實現包log4j- 1.2.16.jar,還有別忘了把JDBC的驅動jar包也加入到library里面 Object怎么做 1:就是前面學過的vo的寫法(規則同樣是那四點) 2:要求必須有一個public為空參的構造方法,現在寫vo一般不寫構造方法,默認就有一個,但是寫構造方法的時候要注意寫上一個public為空參的構造方法 3:要求提供一個標識屬性(identifier) 4:使用非final的類(因為要使用代理來延遲實體的裝載) 5:設若構建一個對象:cn.javass.h4.hello.UserModel,有四個屬性:uuid,userId,name,age 在數據庫中建表 設若構建一個表為tbl_user,字段:uuid,userId,name,age 配置xxx.cfg.xml 1:缺省名稱為 hibernate.cfg.xml 2:存放在當前classes的根目錄下,開發的時候在src根下就可以了 3:主要有如下四部分配置 : (1)與DB的連接 (2)可選配置 (3)資源文件注冊 (4)二級緩存 4:配置的時候可以到Hibernate發行包里面找個hibernate.cfg.xml的例子,比如可以用“\project\hibernate- documentation\quickstart\tutorials\basic\src\test\resources”下面的 hibernate.cfg.xml作例子 5:示例如下:
java代碼: 查看復制到剪貼板打印
  • <?xml?version='1.0'?encoding='utf-8'?>??
  • <!DOCTYPE?hibernate-configuration?PUBLIC??
  • ????????"-//Hibernate/Hibernate?Configuration?DTD?3.0//EN"??
  • ????????"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">??
  • <hibernate-configuration>??
  • ????<session-factory>??
  • ????????<property?name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>??
  • ????????<property?name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>??
  • ????????<property?name="connection.username">test</property>??
  • ????????<property?name="connection.password">test</property>??
  • ??
  • ????????<property?name="connection.pool_size">2</property>??
  • ????????<property?name="dialect">org.hibernate.dialect.OracleDialect</property>??
  • ????????<property?name="show_sql">true</property>??
  • ??
  • ????????<mapping?resource="cn/javass/h4/hello/UserModel.hbm.xml"/>??
  • ????</session-factory>??
  • </hibernate-configuration>??
  • 配置xxx.hbm.xml 1:與被描述的類同名 ,如:UserModel.hbm.xml 2:存放位置與所描述類存放在同一文件夾下 3:主要有如下四部分配置 : (1)類和表的映射 (2)主鍵的映射 (3)類的屬性和DB中字段的映射 (4)關系的映射 4:配置的時候可以到hibernate發行包里面找個例子,比如可以用“\project\hibernate-core\src\test\java \org\hibernate\test\cid”下面的Customer.hbm.xml作例子 5:示例如下:
    java代碼: 查看復制到剪貼板打印
  • <?xml?version="1.0"?encoding="UTF-8"?>??
  • <!DOCTYPE?hibernate-mapping?PUBLIC??
  • ????????'-//Hibernate/Hibernate?Mapping?DTD?3.0//EN'??
  • ????????'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'>??
  • <hibernate-mapping>??
  • ????<class?name="cn.javass.h4.hello.UserModel"?table="tbl_user">??
  • ????????<id?name="uuid">??
  • ????????????<generator?class="assigned"/>??
  • ????????</id>??
  • ????????<property?name=“userId”></property>??
  • ????????<property?name=“name”></property>??
  • ????????<property?name="age"></property>??
  • ????</class>??
  • </hibernate-mapping>??
  • 客戶端文件:
    java代碼: 查看復制到剪貼板打印
  • package?cn.javass.h4.hello;??
  • ??
  • import?org.hibernate.Session;??
  • import?org.hibernate.SessionFactory;??
  • import?org.hibernate.Transaction;??
  • import?org.hibernate.cfg.Configuration;??
  • ??
  • public?class?Client?{??
  • ????public?static?void?main(String[]?args)?{??
  • ????????SessionFactory?sf?=?new?Configuration().configure().buildSessionFactory();??
  • ????????Session?s?=?null;??
  • ????????Transaction?t?=?null;??
  • ??
  • ????????try{??
  • ????????????//準備數據??
  • ????????????UserModel?um?=?new?UserModel();??
  • ????????????um.setUuid("1");??
  • ????????????um.setUserId("id1");??
  • ????????????um.setName("name1");??
  • ????????????um.setAge(1);??
  • ????????????s?=?sf.openSession();??
  • ????????????t?=?s.beginTransaction();??
  • ????????????s.save(um);??
  • ????????????t.commit();??
  • ???????}catch(Exception?err){??
  • ????????????t.rollback();??
  • ????????????err.printStackTrace();??
  • ??????}finally{??
  • ????????????s.close();??
  • ??????}??
  • ????}??
  • }??

  • ? 測試:直接在Elipse里面運行Client文件即可,運行結束,你將會看到在 console輸出:“Hibernate: insert into tbl_user (userId, name, age, uuid) values (?, ?, ?, ?)”,打開數據庫的數據表,你會看到一條值已經加入了。 說明: 1:SessionFactory sf = new Configuration().configure().buildSessionFactory();這句話的意思是讀取hibernate.cfg.xml,創建Session工廠,是線程安全的。 默認是”hibernate.cfg.xml”,不用寫出來,如果文件名不是”hibernate.cfg.xml”,那么需要顯示指定,如下: SessionFactory sf = new Configuration(). configure( “javass.cfg.xml” ).buildSessionFactory(); 2:Session是應用程序主要使用的Hibernate接口,約相當于JDBC的Connection+Statement/PreparedStatement的功能,是線程不安全的 3:在Hibernate4里面,已經不推薦使用Configuration類了,而改為使用 ServiceRegistryBuilder和MetadataSources來代替,新的寫法大致如下: ServiceRegistryBuilder builder = new ServiceRegistryBuilder().configure(); builder.applySetting("connection.driver_class", "oracle.jdbc.driver.OracleDriver"); builder.applySetting("connection.url", "jdbc:oracle:thin:@localhost:1521:orcl"); builder.applySetting("connection.username", "ztb"); builder.applySetting("connection.password", "ztb"); builder.applySetting("connection.pool_size", "2"); builder.applySetting("hibernate.dialect", "org.hibernate.dialect.OracleDialect"); builder.applySetting("show_sql", "true"); MetadataSources sources = new MetadataSources( builder.buildServiceRegistry() ); sources.addResource("cn/javass/h4/hello/UserModel.hbm.xml"); MetadataImpl metadata = (MetadataImpl) sources.buildMetadata(); SessionFactory sf = metadata.getSessionFactoryBuilder().buildSessionFactory(); 這種寫法,現在還沒有實現完全,不太好用,所以官方給出的示例里面還是采用以前的方式,大家先了解一下。 4:這里使用的事務Transaction是Hibernate的Transaction,需要有,不能去掉。 為什么必須有這個Hibernate的事務呢?以HelloWorld為例來看看: 視頻配套PPT,視頻地址【 Hibernate4實戰-獨家視頻課程】 原創內容 轉自請注明【 http://***/forum/blogPost/list/2461.html】

    轉載于:https://www.cnblogs.com/zdh-ry/archive/2012/07/09/2583766.html

    總結

    以上是生活随笔為你收集整理的Hibernate4实战 之 第一部分 Hibernate入门的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。