hibernate開發步驟

*2 hibernate快速入門

  1)開發步驟:

>>導入hibernate相關的10jar包,如果後面,要用到其它功能,可以添加新jar (包括了MySQL的驅動包)

>>創建表:customers.sql

    >>創建實體:Customer.java

>>創建Customer.hbm.xml映射文件,目的是通知hibernate框架,如何將實體和表關聯起來

    >>創建hibernate.cfg.xml配置文件,目的是通知hibernate框架,如何連接不同的數據庫和產生不同數據庫的SQL命令

    >>測試類:CURD操作(CustomerService 

 

   2具體步驟詳解

         >>jar :

antlr-2.7.6.jar  一個語言轉換工具,Hibernate利用它實現 HQL SQL 的轉換

commons-collections-3.1.jar  collections Apache 的工具集,用來增強Java對集合的處理能力

dom4j-1.6.1.jar  dom4j XML 解析器

hibernate3.jar    核心包

javassist-3.9.0.GA.jar  代碼生成工具, Hibernate用它在運行時擴展 Java

jta-1.1.jar  標準的 JAVA 事務處理接口

log4j.jar  日誌包

mysql-connector-java-5.1.7-bin.jar  mysql驅動包

slf4j-api-1.5.8.jar  slf4j-log4j12.jar  hibernate使用的一個日誌系統

>>創建sql

: dropdatabaseifexists hibernate;

createdatabaseifnotexists hibernate;

use hibernate;

droptableifexists customer;

createtableifnotexists customer(

    id intprimarykey auto_increment,

    namevarchar(20) default "小小",

    ageintdefault 21,

    des varchar(100) default "文雅"

);

select * from customer;

 

 

     >>Customer.hbm.xml文件

         1.Hibernate 採用 XML 格式的文件來指定對象和關係數據之間的映射. 在運行時 Hibernate 將根據這個映射文件來生成各種 SQL 語句, 映射文件的擴展名爲 .hbm.xml ;Customer.hbm.xml文件. : 以上Customer.hbm.xml文件是Customer類和customers表的對應關係。該文件前綴必須和類名一致,後綴必須是.hbm.xml。文件位置任意

         2.  property元素:設定持久化類的屬性和表字段映射       

name屬性:指定持久化類的屬性的名字

column屬性:指定表中字段的名稱    

type屬性指定Hibernate映射類型 Hibernate映射類型是java類型與SQL類型的橋樑

.hbm.xml文件的來源:

hibernate-distribution-3.5.6-Final-dist.zip\hibernate-distribution-3.5.6-Final\project\tutorials\web\src\main\resources\org\hibernate\tutorial\domain......

:該映射文件的規範在org.hibernate. hibernate-mapping-3.0.dtd文件中

:

Customer.hbm.xml文件的屬性含義:

<hibernate-mapping package="cn.itcast.web.hibernate.character0(實體對象的包名)">

    <class name="Customer(類名)" table="CUSTOMERS(表名)">

        <id name="id" column="ID" type="integer">

            <generator class="increment"/>

        </id>

        <property name="name(屬性名)" column="NAME(列名)" type="string(hibernate類型)"/>

        <property name="age(屬性名)" column="AGE(列名)" type="integer(hibernate類型)"/>

        <property name="des(屬性名)" column="DES(列名)" type="string(hibernate類型)"/>

    </class>

</hibernate-mapping>

 

     >>hibernate.cfg.xml文件

創建 Hibernate 配置文件, Hibernate 從其配置文件中讀取和數據庫連接的有關信息, 這個文件應該位於應用的 classpath .

文件名必須是hibernate.cfg.xml,文件位置任意,   除了使用xml作爲配置文件之除,還可以使用hibernate.properties文件(項目中不提倡)。

:該映射文件的規範在org.hibernate.hibernate-configuration-3.0.dtd文件中

文件的來源:   hibernate-distribution-3.5.6-Final-dist.zip\hibernate-distribution-3.5.6-Final\project\tutorials\web\src\main\resources

:

hibernate.cfg.xml文件的屬性含義:

<hibernate-configuration>

    <session-factory>

    <!-- 配置連接數據庫的相關屬性 -->

        <property name="connection.driver_class">com.mysql.jdbc.Driver(驅動類名)</property>

        <property name="connection.url">jdbc:mysql://127.0.0.1:3306/hibernate(URL)</property>

        <property name="connection.username">root(訪問數據庫的用戶名)</property>

        <property name="connection.password">root(訪問數據庫的密碼)</property>

        <!-- 通知hibernate動態生成哪個數據庫的SQL命令 -->

        <property name="dialect">org.hibernate.dialect.MySQL5Dialect(數據庫的方言)</property>

        <!-- 顯示hibernate動態生成的SQL命令,true表示顯示 -->

        <property name="show_sql">true(需要顯示sq命令)</property>

        <!-- 加載對象和關係的映射文件 -->

        <mapping resource="cn/itcast/web/hibernate/character0/Customer.hbm.xml(映射文件的類路徑)"/>

    </session-factory>

</hibernate-configuration>

 

>>Configuration:

hibernate中一個用於加載hibernate.cfg.xml文件的類,config .config(xml文件的類路徑”)方法能夠加載指定目錄下的hibernate.cfg.xml文件,config.buildSessionFactory()創建一個SessionFactory工廠。該工廠有大量空閒的session.

Configuration 類負責管理 Hibernate 的配置信息。包括如下內容:

Hibernate運行的底層信息:數據庫的URL、用戶名、密碼、JDBC驅動類,數據庫Dialect,數據庫連接池等(對應 hibernate.cfg.xml 文件)。持久化類與數據表的映射關係(*.hbm.xml 文件).

創建 Configuration 的兩種方式

•      屬性文件(src/hibernate.properties:

    Configuration cfg = new Configuration();

 

•      Xml文件(src/hibernate.cfg.xml)推薦

    Configuration cfg = new Configuration().configure();

    Configuration cfg = new Configuration().configure(“目錄”);

 

     >>SessionFactory接口

       保存了當前的數據庫配置信息和所有映射關係以及預定義的SQL語句。同時,SessionFactory還負責維護Hibernate的二級緩存,有且只放置一種類型數據庫的相關信息 , 重量級,即創建需要大量時間和資源,因此將創建SessionFactory的工作,放在static塊中,只創建一個,便於重用 , SessionFactory是一個線程安全的,所以可以定義成實例變量,無需加synchronized    

創建方式:

Configuration cfg = new Configuration().configure();

   SessionFactory sf = cfg.buildSessionFactory();

 

    >>Session

       SessionFactory.openSession()     

       Session是由SessionFactory獲取而來,它是輕量級,即創建需要少量時間和資源,每次數據庫的操作(CURD)都需要一個Session的綁助,沒有Session就無法與數據庫表操作。

Session 是應用程序與數據庫之間交互操作的一個單線程對象,是 Hibernate 運作的中心,所有持久化對象必須在 session 的管理下纔可以進行持久化操作。此對象的生命週期很短。Session 對象有一個一級緩存,顯式執行 flush 之前,所有的持久層操作的數據都緩存在 session 對象處。相當於 JDBC 中的 Connection

            

       Session常用的API

              session.save(對象)     //向數據庫插入數據

              session.update(對象)   //更新數據

              session.delete(對象)    //刪除數據

              session.get(對象的字節碼class文件,序號)   //查詢數據

             //查詢所有數據信息

            String hibernateSQL = " from 需要查詢的類的類名";   例如: 查詢User類   String hibernateSQL = " from  User"; 此處的類名一個要和創建的類名保持一致.

              Query query = session.createQuery("hibenate query language語句,不是sql語句")    

          例: Query query = session.createQuery(hibernateSQL)  ;  

              List<> list = query.list()

       Session是不安全的,不要定義成實例變量,除非加synchronized

       Session定義成局部變量,即在某個方法內部,就無需加synchronized

    >>Transaction接口(事物)

       通過session.getTransaction()取得事務對象,在應用時,除查詢外,其它都需要事務的支持,查詢對事務的要求不限(可選),

       開始事務:t.begin()

       提交事務:t.commit()

       回滾事務:t.rollback()

       顯示try..catch...finally...

:

         publicvoid saveCustomer(){

       //創建customer對象,並設置屬性值

       Customer cus = new Customer();

       cus.setName("思思");

       cus.setAge(21);

       cus.setDes("文靜");

       //創建confingration對象

       Configuration config = new Configuration();

       //加載配置文件,連接驅動

       config.configure("cn/web/hibernate/hibernate.cfg.xml");

       //創建sessionfactory

       SessionFactory sessionfactory = config.buildSessionFactory();

       //創建session

       Session  session = sessionfactory.openSession();

       //創建事物

       Transaction transaction= session.getTransaction();

       try {

           //事物開始

           transaction.begin();

           //保存實體域對象到表中

           session.save(cus);

       } catch (HibernateException e) {

           //錯誤的情況下事物恢復到原有的狀態

           transaction.rollback();

       }finally{

           //事務結束

           transaction.commit();

       }

session.close();

    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章