`
lijingzhi
  • 浏览: 42285 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Hibernate3.2 Annotation-HelloWorld

阅读更多

Hibernate是ORM的解決方案,其底層對資料庫的操作依賴於JDBC,所以您必須先取得JDBC驅動程式,在這邊所使用的是MySQL,所以您必須至 MySQL® Connector/J 取得MySQL的JDBC驅動程式。

 

接下來至 Hibernate 官方網站 取得Hibernate 3.2、Hibernate Annotations 3.2。

 

您必須安裝JDK 5.0才可以使用Hibernate Annotations的功能。

 

解開Hibernate 3.2的zip檔案後,當中的hibernate3.jar是必要的,而在lib目錄中還包括了許多jar檔案,您可以在 Hibernate 3.0官方的參考手冊 上找到這些jar的相關說明,其中必要的是 antlr、dom4j、CGLIB、asm、Commons Collections、Commons Logging、 EHCache,Hibernate底層還需要Java Transaction API,所以您還需要jta.jar。

 

解開Hibernate Annotations 3.2的zip檔案後,您需要hibernate-annotations.jar、ejb3-persistence.jar這兩個檔案。

 

到這邊為止,總共需要以下的jar檔案:


Hibernate可以運行於單機之上,也可以運行於Web應用程式之中,如果是運行於單機,則將所有用到的jar檔案(包括JDBC驅動程式)設定至CLASSPATH中,如果是運行於Web應用程式中,則將jar檔案置放於WEB-INF/lib中。

 

如果您還需要額外的Library,再依需求加入,例如JUnit、Proxool等等,接下來可以將etc目錄下的 log4j.properties複製至Hibernate專案的Classpath下,並修改一下當中的 log4j.logger.org.hibernate為error,也就是只在在錯誤發生時顯示必要的訊息。

 

接著設置基本的Hibernate配置文件,可以使用XML或Properties檔案,這邊先使用XML,檔名預設為hibernate.cfg.xml:

<?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> 
        <!-- 顯示實際操作資料庫時的SQL --> 
        <property name="show_sql">true</property> 
        <!-- SQL方言,這邊設定的是MySQL --> 
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
        <!-- JDBC驅動程式 --> 
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
        <!-- JDBC URL --> 
        <property name="connection.url">jdbc:mysql://localhost/demo</property> 
        <!-- 資料庫使用者 --> 
        <property name="connection.username">root</property> 
        <!-- 資料庫密碼 --> 
        <property name="connection.password">123456</property> 
 
        <!-- 以下設置物件與資料庫表格映射類別 -->
        <mapping class="onlyfun.caterpillar.User"/> 
    </session-factory> 
</hibernate-configuration>

 

這邊以一個簡單的單機程式來示範Hibernate的配置與功能,首先作資料庫的準備工作,在MySQL中新增一個demo資料庫,並建立user表格:

 

CREATE TABLE user (
    id INT(11) NOT NULL auto_increment PRIMARY KEY,
    name VARCHAR(100) NOT NULL default '',
    age INT
);

 

 對於這個表格,您有一個User類別與之對應,表格中的每一個欄位將對應至User實例上的Field成員。

 

package onlyfun.caterpillar;
 
import javax.persistence.*;
 
@Entity
@Table(name="user") // 非必要,在表格名稱與類別名稱不同時使用
public class User {
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
  
  @Column(name="name") // 非必要,在欄位名稱與屬性名稱不同時使用
    private String name;
  
  @Column(name="age") 
    private Integer age; // 非必要,在欄位名稱與屬性名稱不同時使用
    
    // 必須要有一個預設的建構方法
    // 以使得Hibernate可以使用Constructor.newInstance()建立物件
    public User() {
    }
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
    
    public Integer getAge() {
        return age;
    }
 
    public void setAge(Integer age) {
        this.age = age;
    }
}

 

其中id是個特殊的屬性,Hibernate會使用它來作為主鍵識別,您可以定義主鍵產生的方式,這邊設定為自動產生主鍵,可以看到,實體標識,主鍵生成,以及相關映射,都可以使用Annotation來完成。

 

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

 

package onlyfun.caterpillar;
 
import org.hibernate.SessionFactory;
import org.hibernate.Session;
import org.hibernate.Transaction; 
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration; 
 
public class HibernateAnnotationDemo {
 
    public static void main(String[] args) {
        // 需要AnnotationConfiguration讀取Annotation訊息
        Configuration config = new AnnotationConfiguration().configure();
        // 根據 config 建立 SessionFactory
        // SessionFactory 將用於建立 Session
        SessionFactory sessionFactory = config.buildSessionFactory(); 
 
        // 將持久化的物件
        User user = new User(); 
        user.setName("caterpillar"); 
        user.setAge(new Integer(30));     
 
        // 開啟Session,相當於開啟JDBC的Connection
        Session session = sessionFactory.openSession(); 
        // Transaction表示一組會話操作
        Transaction tx= session.beginTransaction(); 
        // 將物件映射至資料庫表格中儲存
        session.save(user); 
        tx.commit(); 
        session.close(); 
        sessionFactory.close(); 
       
        System.out.println("新增資料OK!請先用MySQL觀看結果!"); 
    }
}

 

注意,使用Annotation時,需要的是AnnotationConfiguration類別。

 

如您所看到的,程式中只需要直接操作User物件,並進行Session與Transaction的相關操作,Hibernate就會自動完成對資料庫的操作,您看不到任何一行JDBC或SQL的陳述,撰寫好以上的各個檔案之後,各檔案的放置位置如下:



 

接著可以開始運行程式,結果如下:

 

Hibernate: insert into user (name, age) values (?, ?)
新增資料OK!請先用MySQL觀看結果!

 

執行結果中顯示了Hibernate所實際使用的SQL,由於這個程式還沒有查詢功能,所以要進入MySQL中看看新增的資料,如下:

 

mysql> select * from user;
+----+-------------+------+
| id | name        | age  |
+----+-------------+------+
|  1 | caterpillar | 30   |
+----+-------------+------+
1 row in set (0.03 sec)

 

  • 大小: 38.8 KB
  • 大小: 57.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics