Hibernate4 : 持久化你的第一個類

來源:互聯網
上載者:User

由於目前我在學校的一個實驗室跟老師學習Java EE開發,老師用的是Seam架構接活做項目,所以這一系列的文章將會向Seam方向寫。。路線大致應該是 : JSP --> Servlet --> Hibernate --> JSF --> EJB3 --> Seam


在開始之前,去www.hibernate.org下載 hibernate4.final.zip ,並將所有依賴的jar檔案放到classpath下


一、Hibernate簡介

持久化,是指將記憶體中的資料儲存到可以永久儲存資料的高裝置中,如硬碟。

Hibernate是一個開放原始碼的對象關係映射(ORM)架構,它對JDBC進行了輕量級的封閉,使得程式員能從繁雜的JDBC操作中徹底解放出來。Hibernate使用hibernate.cfg.xml完成資料庫的配置,使用 *.hbm.xml檔案定義從對象到資料庫的映射規則。

資料庫的配置 : hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration>    <session-factory>    <!-- MySql JDBC驅動類 -->        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>        <!-- MySql DB使用者密碼 -->        <property name="hibernate.connection.password">0000</property>        <!-- MySql 串連URL -->        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>        <!-- MySql DB使用者名稱 -->        <property name="hibernate.connection.username">root</property>        <!-- MySql JDBC方言 -->        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>        <!-- 在控制台列印自動產生的SQL語句 -->        <property name="hibernate.show_sql">true</property>        <!-- 執行個體Bean映射定義檔案 -->        <mapping resource="dev/entity/UserBean.hbm.xml"/>    </session-factory></hibernate-configuration>

<mapping resource="dev/entity/UserBean.hbm.xml"/>是指定映射規則檔案的路徑。UserBean.hbm.xml定義了從UserBean這個類到關聯式資料庫的映射規則。該檔案應該放在與UserBean.class 同級的目錄下。UserBean這個執行個體bean定義如下:

package dev.entity;public class UserBean{private int id; //用做主鍵private String name;private String pwd;//省略get和set方法}

我們要做的就是將UserBean這個類儲存到資料庫的一張名叫USERBEAN的表中。UserBean的每個屬性都對應著資料表中的一個欄位。首先建立USERBREAN資料表:

create table USERBEAN(ID int key auto_increment,NAME varchar(40),PWD varchar(40));

注意,主鍵 ID欄位必須設定成auto_increment,即自增類型。下面通過UserBean.hbm.xml來定義從類到資料庫的映射規則。

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated Jun 29, 2013 2:13:53 PM by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping>    <class name="dev.entity.UserBean" table="USERBEAN">        <id name="id" type="int">            <column name="ID" />            <generator class="native" />        </id>        <property name="name" type="java.lang.String" length="40">            <column name="NAME" />        </property>        <property name="pwd" type="java.lang.String" length="40">            <column name="PWD" />        </property>    </class></hibernate-mapping>


關於這些xml檔案的說明,可以查看官方文檔。上面的xml應該很容易理解,如table屬性指的就是表名,id元素定義了主鍵等等。這裡不再說明


好了,一切準備就緒,下面就開始持久化我們的第一個類吧!


二、使用Hibernate持久化類的流程

構造Configuration對象 --> 構造ServiceRegistry對象 --> 得到SessionFactory對象 -->使用SessionFactory得到Session對象。

得到Session對象後,首先要調用beginTransaction()方法來開啟一個事務,然後調用save()方法將UserBean的執行個體做為參數傳遞進去,再調用Transaction的commit()方法提交事務,這時候UserBean對象才會被儲存到資料庫中。如果調用完save()方法後沒有調用commit(),則不會進行任何的儲存工作,只有當事務關閉或者調用了flush方法後才會真正地將對象持久化。

package dev;import java.rmi.registry.Registry;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;import dev.entity.*;public class Main{/** * @param args */public static void main(String[] args){// TODO Auto-generated method stubConfiguration cfg = new Configuration().configure(); //載入設定檔ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry(); //在得到SessionFactory之前要先進行註冊,Hibernate4新特性SessionFactory factory = cfg.buildSessionFactory(registry);Session session = factory.openSession(); //開啟一個session//填充執行個體beanUserBean user = new UserBean();user.setId(1);user.setName("bruce");user.setPwd("1234567");session.beginTransaction(); //開始一個事務session.save(user); //儲存執行個體對象session.getTransaction().commit(); //提交事務,user會被持久化session.close();}}

注意,如果使用的是Hibernate3或之前的版本,則不需要註冊這一步,即main方法中第二行代碼可以省略,cfg.buildSessionFactory()方法不需要參數。


運行程式,持久化完成。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.