Hibernate使用註釋

可以使用註釋創建hibernate應用程序。 有許多註釋可用於創建hibernate應用程序,如@Entity@Id@Table等。

Hibernate註釋基於JPA 2規範,並支持所有功能。
所有JPA註釋都在javax.persistence.*包中定義。 Hibernate EntityManager實現由JPA規範定義的接口和生命週期。

使用hibernate註釋的核心優點是我們不需要創建映射(*.hbm.xml)文件直接創建對象關聯。 在這裏,hibernate註釋用於提供元數據。

完整的項目結構圖如下 -
Hibernate使用註釋

使用註釋創建hibernate應用程序的示例

創建具有註釋的hibernate應用程序有4個步驟。分別如下 -

  • 爲MySQL添加連接驅動程序的jar文件(如果數據庫是MySQL)和註釋
  • 創建持久化類
  • 在配置文件中添加持久化類的映射
  • 創建檢索或存儲持久對象的類

1. 爲MySQL和註釋添加jar文件

對於MySQL,您需要添加mysql-connector-java-5.1.40-bin.jar文件,以及 hibernate5的核心類庫,如下所示 -

Hibernate使用註釋

2. 創建持久化類

在這裏,我們創建一個持久化類: Employee 。 並使用註釋完成與數據庫表:tb_employee 的映射關聯。

[@Entity](https://github.com/Entity "@Entity")註釋將此類標記爲實體。
[@Table](https://github.com/Table "@Table")註釋指定要保留此實體的數據的表名。 如果不使用[@Table](https://github.com/Table "@Table")註釋,hibernate將使用類名作爲表名稱bydefault
[@Id](https://github.com/Id "@Id")註釋標記此實體的標識符。
[@Column](https://github.com/Column "@Column")註釋指定此屬性或字段的列的詳細信息。如果未指定[@Column](https://github.com/Column "@Column")註釋,則屬性名稱將用作列名稱bydefault

Employee.java 文件的代碼如下 -

package com.yiibai;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "tb_employee")
public class Employee {
    @Id
    private int id;
    private String firstName, lastName;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

}

3. 在配置文件中添加持久化類的映射

打開hibernate.cfg.xml文件,並添加如下的映射資源條目:

<mapping class="com.yiibai.Employee"/>

現在完整的配置文件: 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">

<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>

    <session-factory>

        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>

        <mapping class="com.yiibai.Employee"/>

    </session-factory>

</hibernate-configuration>

4. 創建檢索或存儲持久對象的類

在這個類中,我們只是將Employee類的對象存儲到數據庫中。 在這裏,我們使用StandardServiceRegistryBuilder類和MetadataSources類從持久化類獲取映射的信息。

Test.java 測試類代碼如下 -

package com.yiibai;

import org.hibernate.*;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.*;

public class Test {
    public static void main(String[] args) {
        //Session session = new AnnotationConfiguration().configure().buildSessionFactory().openSession();
        final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml")
                .build();
        // 2. 根據服務註冊類創建一個元數據資源集,同時構建元數據並生成應用一般唯一的的session工廠
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();

        /**** 上面是配置準備,下面開始我們的數據庫操作 ******/
        Session session = sessionFactory.openSession();// 從會話工廠獲取一個session
        Transaction t = session.beginTransaction();

        Employee e1 = new Employee();
        e1.setId(1001);
        e1.setFirstName("Yii");
        e1.setLastName("Bai");

        Employee e2 = new Employee();
        e2.setId(1002);
        e2.setFirstName("Min");
        e2.setLastName("Su");

        session.persist(e1);
        session.persist(e2);

        t.commit();
        session.close();
        System.out.println("successfully saved");
    }
}

運行上面(Test.java)示例,得到以下結果 -

... ...
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
Hibernate: insert into tb_employee (firstName, lastName, id) values (?, ?, ?)
Hibernate: insert into tb_employee (firstName, lastName, id) values (?, ?, ?)
successfully saved

查看數據庫表 tb_employee 中的數據,應該會看到以下結果 -

Hibernate使用註釋