可以使用注釋創(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)用程序有4
個(gè)步驟。分別如下 -
對于MySQL,您需要添加mysql-connector-java-5.1.40-bin.jar
文件,以及 hibernate5的核心類庫,如下所示 -
在這里,我們創(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;
}
}
打開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>
在這個(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é)果 -