鍍金池/ 教程/ Java/ Hibernate使用注釋
Hibernate繼承映射
Hibernate每個(gè)子類一張表(使用XML文件)實(shí)例
Hibernate快速入門
Hibernate使用注釋
Hibernate使用xml文件的每個(gè)類層次一張表
Hibernate命名查詢
Hibernate每個(gè)層次類一張表(使用注釋)
Hibernate組件映射
Hibernate事務(wù)管理
Hibernate二級緩存
集合映射Set(使用xml文件)
Hibernate每個(gè)具體類一張表映射(使用XML)
集合映射中的映射列表(使用xml文件)
Hibernate使用Log4j日志記錄(使用properties文件)
Hibernate集合映射
集合Map映射(使用xml文件)
集合Set映射一對多(使用xml文件)
Hibernate查詢語言(HQL)
Hibernate入門程序
Hibernate標(biāo)準(zhǔn)查詢語言
Hibernate使用Log4j日志記錄(使用xml文件)
Hibernate教程
Hibernate體系結(jié)構(gòu)
Hibernate生成器類
Hibernate通過many-to-one元素的一對一映射
集合Map多對多映射(使用xml文件)
Web應(yīng)用程序使用Hibernate
Hibernate一對多映射列表實(shí)例(使用xml文件)
Hibernate通過one-to-one元素的一對一映射
Hibernate每個(gè)子類一張表(使用注釋)實(shí)例
集合映射中的映射包(使用xml文件)
通過Bag一對多映射示例(使用xml文件)
Hibernate緩存
Hibernate每個(gè)具體類一張表映射(使用注釋)

Hibernate使用注釋

可以使用注釋創(chuàng)建hibernate應(yīng)用程序。 有許多注釋可用于創(chuàng)建hibernate應(yīng)用程序,如@Entity,@Id,@Table等。

Hibernate注釋基于JPA 2規(guī)范,并支持所有功能。
所有JPA注釋都在javax.persistence.*包中定義。 Hibernate EntityManager實(shí)現(xiàn)由JPA規(guī)范定義的接口和生命周期。

使用hibernate注釋的核心優(yōu)點(diǎn)是我們不需要?jiǎng)?chuàng)建映射(*.hbm.xml)文件直接創(chuàng)建對象關(guān)聯(lián)。 在這里,hibernate注釋用于提供元數(shù)據(jù)。

完整的項(xiàng)目結(jié)構(gòu)圖如下 -

使用注釋創(chuàng)建hibernate應(yīng)用程序的示例

創(chuàng)建具有注釋的hibernate應(yīng)用程序有4個(gè)步驟。分別如下 -

  • 為MySQL添加連接驅(qū)動程序的jar文件(如果數(shù)據(jù)庫是MySQL)和注釋
  • 創(chuàng)建持久化類
  • 在配置文件中添加持久化類的映射
  • 創(chuàng)建檢索或存儲持久對象的類

1. 為MySQL和注釋添加jar文件

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

2. 創(chuàng)建持久化類

在這里,我們創(chuàng)建一個(gè)持久化類: Employee 。 并使用注釋完成與數(shù)據(jù)庫表:tb_employee 的映射關(guān)聯(lián)。

@Entity注釋將此類標(biāo)記為實(shí)體。
@Table注釋指定要保留此實(shí)體的數(shù)據(jù)的表名。 如果不使用@Table注釋,hibernate將使用類名作為表名稱bydefault。
@Id注釋標(biāo)記此實(shí)體的標(biāo)識符。
@Column注釋指定此屬性或字段的列的詳細(xì)信息。如果未指定@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"/>

現(xiàn)在完整的配置文件: 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. 創(chuàng)建檢索或存儲持久對象的類

在這個(gè)類中,我們只是將Employee類的對象存儲到數(shù)據(jù)庫中。 在這里,我們使用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. 根據(jù)服務(wù)注冊類創(chuàng)建一個(gè)元數(shù)據(jù)資源集,同時(shí)構(gòu)建元數(shù)據(jù)并生成應(yīng)用一般唯一的的session工廠
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();

        /**** 上面是配置準(zhǔn)備,下面開始我們的數(shù)據(jù)庫操作 ******/
        Session session = sessionFactory.openSession();// 從會話工廠獲取一個(gè)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");
    }
}

運(yùn)行上面(Test.java)示例,得到以下結(jié)果 -

... ...
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

查看數(shù)據(jù)庫表 tb_employee 中的數(shù)據(jù),應(yīng)該會看到以下結(jié)果 -