入門 02 - 第一個Hibernate程式

這邊以一個簡單的單機程式來示範Hibernate的配置與功能,在這個例子中的一些操作,實際上會使用一些自動化工具來完成,而不一定親自手動操作設定,這邊完全手動的原因,在於讓您可以知道Hibernate實際上會作那些動作,在進行範例之前,請先確定前一個主題中的相關jar檔案都已經設定在CLASSPATH中。

 我們先作資料庫的準備工作,在MySQL中新增一個HibernateTest資料庫,並建立USER表格:

CREATE TABLE USER (
    user_id CHAR(32) NOT NULL PRIMARY KEY,
    name VARCHAR(16) NOT NULL,
    sex CHAR(1),
    age INT
);

 我們先撰寫一個純Java物件,它純綷表示一個資料集合,待會我們會將之映射至資料庫的表格上,程式如下:

User.java
package onlyfun.caterpillar;

public class User {
    private String id;
    private String name;
    private char sex;
    private int age;

    public int getAge() {
        return age;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public char getSex() {
        return sex;
    }

    public void setAge(int i) {
        age = i;
    }

    public void setId(String string) {
        id = string;
    }

    public void setName(String string) {
        name = string;
    }

    public void setSex(char c) {
        sex = c;
    }
}

 其中id是個特殊的屬性,Hibernate會使用它來作為主鍵識別,我們可以定義主鍵產生的方式,這是在XML映射文件中完成,為了告訴Hibernate物件如何映射至資料庫表格,我們撰寫一個XML映射文件檔名是User.hbm.xml,如下所示:

User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>

    <class name="onlyfun.caterpillar.User" table="USER">

        <id name="id" type="string" unsaved-value="null">
            <column name="user_id" sql-type="char(32)" />
            <generator class="uuid.hex"/>
        </id>

        <property name="name" type="string" not-null="true">
            <column name="name" length="16" not-null="true"/>
        </property>

        <property name="sex" type="char"/>

        <property name="age" type="int"/>

    </class>

</hibernate-mapping>

 這個XML文件定義了物件屬性映射至資料庫表格的關係,您可以很簡單的瞭解對映的方法,像是User物件對應至USER表格,其中我們使用uuid.hex來定義主鍵的產生算法,UUID算法使用IP地址、JVM的啟動時間、系統時間和一個計數值來產生主鍵。除了使用uuid.hex之外,我們還可以使用其它的方式來產生主鍵,像是increment等,這可以在Hibernate參考手冊中找到相關資料。

 <property>標籤用於定義Java物件的屬性,而當中的<column/>標籤用於定義與資料庫的對應,如果您是手工建立Java物件與資料庫表格,則在最簡單的情況下,可以只定義<property name="sex"/>這樣的方式,而由Hibernate自動判斷Java物件屬性與資料庫表格名稱對應關係,在<property/>與<column/>標籤上的額外設定(像是not null、sql-type等),則可以用於自動產生Java物件與資料庫表格的工具上。

 接下來我們定義Hibernate配置文件,主要是進行SessionFactory配置,Hibernate可以使用XML或屬性文件來進行配置,我們這邊先介紹如何使用XML配置,這也是Hibernate所建議的配置方式,我們的檔名是hibernate.cfg.xml,如下:

hibernate.cfg.xml
<?xml version='1.0' encoding='big5'?>
<!DOCTYPE hibernate-configuration
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- 顯示實際操作資料庫時的SQL -->
        <property name="show_sql">true</property>
        <!-- SQL方言,這邊設定的是MySQL -->
        <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
        <!-- JDBC驅動程式 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- JDBC URL -->
        <property name="connection.url">jdbc:mysql://localhost/HibernateTest</property>
        <!-- 資料庫使用者 -->
        <property name="connection.username">caterpillar</property>
        <!-- 資料庫密碼 -->
        <property name="connection.password">123456</property>

        <!-- 物件與資料庫表格映射文件 -->
        <mapping resource="User.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

 接下來我們撰寫一個測試的程式,這個程式將直接以Java程式設計人員熟悉的語法方式來操作物件,而實際上也直接完成對資料庫的操作,程式將會將一筆資料存入表格之中:

HibernateTest.java
import onlyfun.caterpillar.*;
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;

public class HibernateTest {
    public static void main(String[] args) throws HibernateException {
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

        User user = new User();
        user.setName("caterpillar");
        user.setSex('M');
        user.setAge(28);

        Session session = sessionFactory.openSession();
        Transaction tx= session.beginTransaction();
        session.save(user);
        tx.commit();
        session.close();
        sessionFactory.close();
		
        System.out.println("新增資料OK!請先用MySQL觀看結果!");
    }
}

 Configuration代表了Java物件至資料庫的映射設定,這個設定是從我們上面的XML而來,接下來我們從Configuration取得SessionFactory物件,並由它來開啟一個Session,它代表物件與表格的一次會話操作,而Transaction則表示一組會話操作,我們只需要直接操作User物件,並進行Session與Transaction的相關操作,Hibernate就會自動完成對資料庫的操作。這邊對程式先只作簡單的介紹,之後再詳加說明。

 將所有的.java檔案編譯,並將兩個XML檔案放置在與HibernateTest相同的目錄中,也就是檔案位置如下:

/
|--HibernateTest.class
|--User.hbm.xml
|--hibernate.cfg.xml
    /onlyfun
        /caterpillar
        |--User.class

 OK!現在您可以執行HibernateTest,程式將會出現以下的訊息:

log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: insert into USER (name, sex, age, user_id) values (?, ?, ?, ?)
新增資料OK!請先用MySQL觀看結果!

 這邊只先進行資料的存入,要觀看資料存入的結果的話,請進入MySQL觀看,以下是資料庫存入的結果:

mysql> SELECT * FROM USER;
+----------------------------------+-------------+------+------+
| user_id                          | name        | sex  | age  |
+----------------------------------+-------------+------+------+
| 297e3dbdfea6023d00fea60241000001 | caterpillar | M    |   28 |
+----------------------------------+-------------+------+------+
1 rows in set (0.00 sec)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值