最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

hibernate4快速入門實例詳解

 更新時間:2017年09月12日 10:17:11   作者:動力節(jié)點  
Hibernate是一個輕量級的ORMapping框架,本文重點給大家介紹hibernate4 入門實例詳細(xì),需要的朋友參考下吧

Hibernate是什么

Hibernate是一個輕量級的ORMapping框架

ORMapping原理(Object RelationalMapping)

ORMapping基本對應(yīng)規(guī)則:

1:類跟表相對應(yīng)

2:類的屬性跟表的字段相對應(yīng)

3:類的實例與表中具體的一條記錄相對應(yīng)

4:一個類可以對應(yīng)多個表,一個表也可以對應(yīng)對個類

5:DB中的表可以沒有主鍵,但是Object中必須設(shè)置主鍵字段

6:DB中表與表之間的關(guān)系(如:外鍵)映射成為Object之間的關(guān)系

7:Object中屬性的個數(shù)和名稱可以和表中定義的字段個數(shù)和名稱不一樣

ORMapping的基本實現(xiàn)方式:

使用JDBC,用SQL來操作數(shù)據(jù)庫,只是看動態(tài)生成還是人工寫代碼來實現(xiàn)。

大家想想,我們實現(xiàn)過ORMapping嗎?




Hibernate能干什么:

Hibernate主要用來實現(xiàn)Java對象和表之間的映射,除此之外還提供還提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,可以大幅度減少開發(fā)時人工使用SQL和JDBC處理數(shù)據(jù)的時間。

Hibernate的目標(biāo)是對于開發(fā)者通常的數(shù)據(jù)持久化相關(guān)的編程任務(wù),解放其中的95%。對于以數(shù)據(jù)為中心的程序來說,它們往往只在數(shù)據(jù)庫中使用存儲過程來實現(xiàn)商業(yè)邏輯,Hibernate可能不是最好的解決方案;對于那些在基于Java的中間層應(yīng)用中,它們實現(xiàn)面向?qū)ο蟮臉I(yè)務(wù)模型和商業(yè)邏輯的應(yīng)用,Hibernate是最有用的。

Hibernate可以幫助你消除或者包裝那些針對特定廠商的SQL代碼,并且?guī)湍惆呀Y(jié)果集從表格式的表示形式轉(zhuǎn)換到一系列的對象去。


一個非常簡要的Hibernate體系結(jié)構(gòu)的高層概要圖


Hibernate運行時體系結(jié)構(gòu)

“最小”的體系結(jié)構(gòu)方案,要求應(yīng)用程序提供自己的 JDBC連接并管理自己的事務(wù)。這種方案使用了Hibernate API 的最小子集.


“全面解決”的體系結(jié)構(gòu)方案,將應(yīng)用層從底層的JDBC/JTAAPI中抽象出來,而讓Hibernate來處理這些細(xì)節(jié)。


SessionFactory(org.hibernate.SessionFactory)

針對單個數(shù)據(jù)庫映射關(guān)系經(jīng)過編譯后的內(nèi)存鏡像,是線程安全的(不可變)。 它是生成Session的工廠,本身要用到ConnectionProvider。

Session(org.hibernate.Session)

表示應(yīng)用程序與持久儲存層之間交互操作的一個單線程對象,此對象生存期很短,隱藏了JDBC連接,也是Transaction的工廠。

Transaction(org.hibernate.Transaction)

應(yīng)用程序用來指定原子操作單元范圍的對象,它是單線程的,生命周期很短。它通過抽象將應(yīng)用從底層具體的JDBC、JTA以及CORBA事務(wù)隔離開。

ConnectionProvider(org.hibernate.connection.ConnectionProvider)

生成JDBC連接的工廠(有連接池的作用)。它通過抽象將應(yīng)用從底層的Datasource或DriverManager隔離開。僅供開發(fā)者擴(kuò)展/實現(xiàn)用,并不暴露給應(yīng)用程序使用。

TransactionFactory(org.hibernate.TransactionFactory)

生成Transaction對象實例的工廠。僅供開發(fā)者擴(kuò)展/實現(xiàn)用,并不暴露給應(yīng)用程序使用。

HelloWorld

要研究怎么做,先得搞清楚需要做什么

根據(jù)剛才的學(xué)習(xí),做基本的Hibernate應(yīng)用程序,要完成下面的工作:Object、數(shù)據(jù)庫的表、兩種配置文件、客戶端程序來調(diào)用Hibernate的接口進(jìn)行操作。

構(gòu)建環(huán)境

最簡單的方法:把hibernate-release-4.0.0.Beta4.zip包里面lib/required下的jar包全部添加到工程的library里面,另外還需添加slf4j的實現(xiàn)包slf4j-log4j12-1.5.8.jar和log4j的實現(xiàn)包log4j-1.2.16.jar,還有別忘了把JDBC的驅(qū)動jar包也加入到library里面

Object怎么做

1:就是前面學(xué)過的vo的寫法(規(guī)則同樣是那四點)

2:要求必須有一個public為空參的構(gòu)造方法,現(xiàn)在寫vo一般不寫構(gòu)造方法,默認(rèn)就有一個,但是寫構(gòu)造方法的時候要注意寫上一個public為空參的構(gòu)造方法

3:要求提供一個標(biāo)識屬性(identifier)

4:使用非final的類(因為要使用代理來延遲實體的裝載)

5:設(shè)若構(gòu)建一個對象:com.bjpowernode.h4.hello.UserModel,有四個屬性:uuid,userId,name,age

在數(shù)據(jù)庫中建表

設(shè)若構(gòu)建一個表為tbl_user,字段:uuid,userId,name,age

配置xxx.cfg.xml

1:缺省名稱為hibernate.cfg.xml

2:存放在當(dāng)前classes的根目錄下,開發(fā)的時候在src根下就可以了

3:主要有如下四部分配置 :

(1)與DB的連接

(2)可選配置

(3)資源文件注冊

(4)二級緩存

4:配置的時候可以到Hibernate發(fā)行包里面找個hibernate.cfg.xml的例子,比如可以用“\project\hibernate-documentation\quickstart\tutorials\basic\src\test\resources”下面的hibernate.cfg.xml作例子

5:示例如下:

<?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/bjpowernode/h4/hello/UserModel.hbm.xml"/>  
  </session-factory>  
</hibernate-configuration>  

配置xxx.hbm.xml

1:與被描述的類同名 ,如:UserModel.hbm.xml

2:存放位置與所描述類存放在同一文件夾下

3:主要有如下四部分配置 :

(1)類和表的映射

(2)主鍵的映射

(3)類的屬性和DB中字段的映射

(4)關(guān)系的映射

4:配置的時候可以到hibernate發(fā)行包里面找個例子,比如可以用“\project\hibernate-core\src\test\java\org\hibernate\test\cid”下面的Customer.hbm.xml作例子

5:示例如下:

<?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="com.bjpowernode.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> 

客戶端文件:

package com.bjpowernode.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{ 
  //準(zhǔn)備數(shù)據(jù) 
  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文件即可,運行結(jié)束,你將會看到在console輸出:“Hibernate: insert into tbl_user (userId, name, age, uuid) values (?, ?, ?, ?)”,打開數(shù)據(jù)庫的數(shù)據(jù)表,你會看到一條值已經(jīng)加入了。

說明:

1:SessionFactory sf = new Configuration().configure().buildSessionFactory();這句話的意思是讀取hibernate.cfg.xml,創(chuàng)建Session工廠,是線程安全的。

默認(rèn)是”hibernate.cfg.xml”,不用寫出來,如果文件名不是”hibernate.cfg.xml”,那么需要顯示指定,如下:

SessionFactory sf = new Configuration(). configure( “bjpowernode.cfg.xml” ).buildSessionFactory();

2:Session是應(yīng)用程序主要使用的Hibernate接口,約相當(dāng)于JDBC的Connection+Statement/PreparedStatement的功能,是線程不安全的 

3:在Hibernate4里面,已經(jīng)不推薦使用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/bjpowernode/h4/hello/UserModel.hbm.xml");
MetadataImpl metadata = (MetadataImpl) sources.buildMetadata();
SessionFactory sf = metadata.getSessionFactoryBuilder().buildSessionFactory();

這種寫法,現(xiàn)在還沒有實現(xiàn)完全,不太好用,所以官方給出的示例里面還是采用以前的方式,大家先了解一下。

4:這里使用的事務(wù)Transaction是Hibernate的Transaction,需要有,不能去掉。

為什么必須有這個Hibernate的事務(wù)呢?以HelloWorld為例來看看:

總結(jié)

以上所述是小編給大家介紹的hibernate4快速入門實例詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java多線程Semaphore工具的使用詳解

    Java多線程Semaphore工具的使用詳解

    Semaphore 是一種用于控制線程并發(fā)訪問數(shù)的同步工具。它通過維護(hù)一定數(shù)量的許可證來限制對共享資源的訪問,許可證的數(shù)量就是可以同時訪問共享資源的線程數(shù)目,需要的朋友可以參考下
    2023-05-05
  • Spring MVC+MyBatis+MySQL實現(xiàn)分頁功能實例

    Spring MVC+MyBatis+MySQL實現(xiàn)分頁功能實例

    分頁功能是我們?nèi)粘i_發(fā)中經(jīng)常會遇到的,下面這篇文章主要給大家介紹了Spring MVC+MyBatis+MySQL實現(xiàn)分頁功能的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • spring boot實現(xiàn)過濾器和攔截器demo

    spring boot實現(xiàn)過濾器和攔截器demo

    本篇文章主要介紹了spring boot實現(xiàn)過濾器和攔截器demo ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • IO 使用說明介紹

    IO 使用說明介紹

    本篇文章小編為大家介紹,IO 使用說明介紹。需要的朋友參考下
    2013-04-04
  • Java中輸入與輸出的方法總結(jié)

    Java中輸入與輸出的方法總結(jié)

    這篇文章主要為大家總結(jié)了一下Java中輸入與輸出的三種方法,文中通過示例詳細(xì)的講解了一下這些方法的使用,需要的小伙伴可以參考一下
    2022-04-04
  • Java中的main函數(shù)的詳細(xì)介紹

    Java中的main函數(shù)的詳細(xì)介紹

    這篇文章主要介紹了Java中的main函數(shù)的詳細(xì)介紹的相關(guān)資料,main()函數(shù)在java程序中必出現(xiàn)的函數(shù),這里就講解下使用方法,需要的朋友可以參考下
    2017-09-09
  • Idea如何導(dǎo)入一個SpringBoot項目的方法(圖文教程)

    Idea如何導(dǎo)入一個SpringBoot項目的方法(圖文教程)

    這篇文章主要介紹了Idea如何導(dǎo)入一個SpringBoot項目的方法(圖文教程),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java volatile的適用場景實例詳解

    Java volatile的適用場景實例詳解

    在本文里我們給大家整理了一篇關(guān)于Java volatile的適用場景實例內(nèi)容和知識點,需要的朋友們可以學(xué)習(xí)下。
    2019-08-08
  • SpringBoot Mybatis動態(tài)數(shù)據(jù)源切換方案實現(xiàn)過程

    SpringBoot Mybatis動態(tài)數(shù)據(jù)源切換方案實現(xiàn)過程

    這篇文章主要介紹了SpringBoot+Mybatis實現(xiàn)動態(tài)數(shù)據(jù)源切換方案過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • java jdbc連接和使用詳細(xì)介紹

    java jdbc連接和使用詳細(xì)介紹

    這篇文章主要介紹了 java jdbc連接和使用詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-12-12

最新評論

桦南县| 封丘县| 洛扎县| 四子王旗| 江华| 藁城市| 东方市| 文安县| 通江县| 华阴市| 玉树县| 林甸县| 海兴县| 都江堰市| 临漳县| 双柏县| 昆山市| 凤城市| 涡阳县| 西贡区| 漳浦县| 江山市| 苍溪县| 炉霍县| 饶阳县| 高平市| 通化县| 龙游县| 安仁县| 吉首市| 云龙县| 明光市| 南郑县| 稻城县| 阿城市| 金秀| 叶城县| 临澧县| 密云县| 定日县| 台北县|