可以使用注释创建hibernate应用程序。 有许多注释可用于创建hibernate应用程序,如@Entity,@Id,@Table等。
Hibernate注释基于JPA 2规范,并支持所有功能。
所有JPA注释都在javax.persistence.*
包中定义。 Hibernate EntityManager实现由JPA规范定义的接口和生命周期。
使用hibernate注释的核心优点是我们不需要创建映射(*.hbm.xml
)文件直接创建对象关联。 在这里,hibernate注释用于提供元数据。
完整的项目结构图如下 -
使用注释创建hibernate应用程序的示例
创建具有注释的hibernate应用程序有4
个步骤。分别如下 -
- 为MySQL添加连接驱动程序的jar文件(如果数据库是MySQL)和注释
- 创建持久化类
- 在配置文件中添加持久化类的映射
- 创建检索或存储持久对象的类
1. 为MySQL和注释添加jar文件
对于MySQL,您需要添加mysql-connector-java-5.1.40-bin.jar
文件,以及 hibernate5的核心类库,如下所示 -
2. 创建持久化类
在这里,我们创建一个持久化类: Employee
。 并使用注释完成与数据库表:tb_employee
的映射关联。
@Entity
注释将此类标记为实体。@Table
注释指定要保留此实体的数据的表名。 如果不使用@Table
注释,hibernate将使用类名作为表名称bydefault
。@Id
注释标记此实体的标识符。@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
中的数据,应该会看到以下结果 -