2011年2月17日 星期四

Hibernate 教學 - 基礎簡介

建立第一個 Hibernate 範例
1.建立 Hibernate 配置文件  hibernate.cfg.xml
2.設計 Account 資料表
3.建立 Account 實體
4.建立 Account 實體的映射文件 Account.hbm.xml
5.將 Account 的配置文件加入到 hibernate.cfg.xml
6.最後寫個簡單的 JSP 來測試

建立 Hibernate 配置文件  hibernate.cfg.xml

  
    
    org.hibernate.dialect.MySQLDialect
    com.mysql.jdbc.Driver
    
    jdbc:mysql://localhost:3306/hibernate
    
    root
    
    z123456
    
    true
  


Hibernate 的配置文件是他的核心,以上的配置足夠告訴 Hibernate 該如何去連接資料庫另外一個重點就是配置文件存放了所有的的映射文件,在 Eclipse 中,需將此配置文件加入到 src 目錄下才會生效

設計 Account 資料表

在創建資料表時可以手動創建,也可以利用 Hibernate 提供的
org.hibernate.tool.hbm2ddl.SchemaExport 來創建,故以下寫一個程式範例來創建
但是要用以下程式創建資料表時,你的 Hibernate 的配置文件必須先註冊你要創建的資料表所對應的實體
<mapping resource="org/model/Account.hbm.xml"/>  等等第五點會介紹
import org.hibernate.cfg.*;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class ExportTable{
    public static void main(String[] args){
        //讀取 Hibernate 的配置文件
        Configuration cfg = new Configuration().configure();
        //建立 SchemaExport 物件
        SchemaExport export = new SchemaExport(cfg);
        //創建資料表
        export.create(true, true);
    }
}




執行完上述之後會在 Eclipse 的 Console 中打印以下訊息
drop table if exists Account
create table Account (id varchar(255) not null, name varchar(255), password varchar(255), date datetime, primary key (id))
建立 Account 實體

package org.model;
import java.util.Date;
public class Account 
{
    private String id;
    private String name;
    private String password;
    private Date date;
 
    public Account(){}

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Date getDate() {
        return date;
    }
    public void setDate(Date date) {
        this.date = date;
    } 
}

以上範例不外乎是一個物件(實體)會對應到資料庫中的一張資料表

建立 Account 實體的配置文件 Account.hbm.xml


   
      
          
      

      
      
      
         
  


* 以上的 class 標籤的 name 屬性指明了此映射文件所需映射的實體 即 org.model.Account
* 以上的 class 標籤的 table 屬性指明了此映射文件對應到後台資料庫的哪個資料表
* 以上的 id 標籤的 name 屬性指明了在映射時 Account 實體中是對應到哪個屬性
* 以上的 id 標籤的 column 屬性指明了在映射時, 資料表該對應到哪個欄位
* 以上的 generator 標籤指明了主鍵生成的策略, 以上使用的 uuid 生成主鍵時 是字串 不是整數
* 以上的 property 標籤指明了資料庫和實體間的屬性和欄位映射


將 Account 的配置文件加入到 hibernate.cfg.xml
映射文件寫完之後,你必須讓 Hibernate 知道有這樣的一個映射關係

而配置所有有關於Hibernate 的地方就是在 Hibernate 的配置文件了

所以須將你的映射文件加入到 Hibernate 的配置文件中

<mapping resource="org/model/Account.hbm.xml"/>                  

簡單的 JSP 來測試


Configuration cfg = new Configuration();   //讀取 Hibernate 的配置文件
SessionFactory factory = cfg.buildSessionFactory();  //創建一個工廠

Session session = factory.openSession();  //工廠專門用來取得 session

Transaction tx = session.beginTransaction();   //針對目前的 session 開啟一項交易

Account account1 = new Account();  //建立 Account 的一個實體
account1.setName("test2");
account1.setPassword("123456");
account1.setDate(new Date());

session.save(account1);   //保存到 session 中
tx.commit();   //提交事務
session.close();


最後可以在看看 Hibernate 的物件生命週期
hibernate 的物件生命週期

沒有留言:

張貼留言