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)

 

Stkcd [股票代码] ShortName [股票简称] Accper [统计截止日期] Typrep [报表类型编码] Indcd [行业代码] Indnme [行业名称] Source [公告来源] F060101B [净利润现金净含量] F060101C [净利润现金净含量TTM] F060201B [营业收入现金含量] F060201C [营业收入现金含量TTM] F060301B [营业收入现金净含量] F060301C [营业收入现金净含量TTM] F060401B [营业利润现金净含量] F060401C [营业利润现金净含量TTM] F060901B [筹资活动债权人现金净流量] F060901C [筹资活动债权人现金净流量TTM] F061001B [筹资活动股东现金净流量] F061001C [筹资活动股东现金净流量TTM] F061201B [折旧摊销] F061201C [折旧摊销TTM] F061301B [公司现金流1] F061302B [公司现金流2] F061301C [公司现金流TTM1] F061302C [公司现金流TTM2] F061401B [股权现金流1] F061402B [股权现金流2] F061401C [股权现金流TTM1] F061402C [股权现金流TTM2] F061501B [公司自由现金流(原有)] F061601B [股权自由现金流(原有)] F061701B [全部现金回收率] F061801B [营运指数] F061901B [资本支出与折旧摊销比] F062001B [现金适合比率] F062101B [现金再投资比率] F062201B [现金满足投资比率] F062301B [股权自由现金流] F062401B [企业自由现金流] Indcd1 [行业代码1] Indnme1 [行业名称1] 季度数据,所有沪深北上市公司的 分别包含excel、dta数据文件格式及其说明,便于不同软件工具对数据的分析应用 数据来源:基于上市公司年报及公告数据整理,或相关证券交易所、各部委、省、市数据 数据范围:基于沪深北证上市公司 A股(主板、中小企业板、创业板、科创板等)数据整理计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值