可以使用注释创建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;
} }
Java

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

打开hibernate.cfg.xml文件,并添加如下的映射资源条目:

<mapping class="com.yiibai.Employee"/>
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"> <!-- 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>
XML

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");
}
}
Java

运行上面(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
Shell

查看数据库表 tb_employee 中的数据,应该会看到以下结果 -

Hibernate使用注释的更多相关文章

  1. Hibernate 使用注释书写配置文件

    Hibernate 使用注释 Hibernate使用注释有个好处就是我们不需要建立.hbm.xml文件,直接在实体类中添加注解就可以完成往数据库中进行数据操作 配置文件:hibernate.cfg.x ...

  2. Hibernate的注释该如何使用?每一个注释代表什么意思?

    出自:java快快飞 原文地址:http://blog.sina.com.cn/s/blog_697b968901016s31.html Hibernate的注释该如何使用?每一个注释代表什么意思? ...

  3. Hibernate @Embeddable注释

    在hibernate中实现自定义类型,只要实现UserType接口即可或者以Component的形式提供.JPA的@Embedded注释可以在你的Entity中使用一般的Java对象,此对象需要用@E ...

  4. hibernate 配置+注释

    Hibernate配置属性 属性名 用途 hibernate.dialect 一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值 full.c ...

  5. hibernate简单注释(一.1)

    **************************************************************************************************** ...

  6. hibernate简单注释(一)

    *****************************hibernate.cfg.xml************************************ <?xml version= ...

  7. Hibernate Tools

    (声明)本文转自:http://linjia880714.iteye.com/blog/859334 hibernate-tools详细使用教程 使用hibernate-tool的版本是hiberna ...

  8. Hibernate的注解方法的使用

    1.配置映射关系的xml方式 我们知道,Hibernate是一个典型的ORM框架,用以解决对象和关系的不匹配.其思想就是将关系数据库中表的记录映射成为对象,以对象形式展现,这样一来,就可以把对数据库的 ...

  9. Spring的DataSource配置、将Hibernate配置全部写到Spring配置

    DataSource可以集中管理数据库连接,减少维护工作量,使部署更简单: Spring的DataSource配置:(Spring数据源配置)这里使用dbcp,还有很多其他的如c3p0,jdbc,jn ...

随机推荐

  1. Matlab中向量场的绘制

    % quiver(x,y,u,v) % x,y是包含坐标位置的矩阵,而u和v则是包含偏导数的矩阵. % 例如绘制f(x,y)=y-3x-2x^2-3xy-3y^2的方法: % 先用gradient函数 ...

  2. CSS:超出省略三部曲

    overflow:hidden; 超出隐藏 white-space:nowrap;   不让换行,直到<br /> text-overflow:ellipsis;  超出显示省略号... ...

  3. ASP.NET Core 1.0基础之诊断

    来源https://docs.asp.net/en/latest/fundamentals/diagnostics.html ASP.NET Core 1.0包含了一些新的特性来辅助诊断问题.可以在S ...

  4. vue生命周期钩子,一张图片

  5. window7访问虚拟机ubuntu中的mysql

    window7上面下载mysql很麻烦,不喜欢,所以改用虚拟机安装ubuntu系统,提供mysql服务. 第一步:下载vmware workstation12, 第二步:下载ubuntu镜像,我用的是 ...

  6. 表格中的IE BUG

    在表格应用了跨列单元格后,在IE6/7下当跨列单元格中的元素长度超过其跨列单元格中第一个单元格的宽度时会产生换行,如下所示: 解决方法: 1. 设置 table 的 'table-layout' 特性 ...

  7. http://blog.163.com/eugeneheen_chen@126/blog/static/120812157201291994916866/

    http://blog.163.com/eugeneheen_chen@126/blog/static/120812157201291994916866/

  8. poj 1426 Find The Multiple (bfs 搜索)

    Find The Multiple Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18012   Accepted: 729 ...

  9. MPTCP 源码分析(二) 建立子路径

    简述      MPTCP在进行三次握手之后,客户端和服务端会进行地址信息的交换,让对方知道彼此未用的地址信息. 当客户端知道服务端的地址后就可以建立其他子路径.三次握手和建立子路径的过程如图1:   ...

  10. 【Python3 爬虫】09_正则表达式(re.math()、re.search()、re.sub()、全局匹配函数)

    re.math()函数 从源字符串的起始位置匹配一个模式 语法:re.match(pattern, string, flag) 第一个参数代表对应的正则表达式,第二个参数代表对应的源字符,第三个参数是 ...