Hibernate使用注释

可以使用注释创建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 中的数据,应该会看到以下结果 -

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Hibernate 支持使用自定义注解来实现实体类和数据库表之间的映射关系。您可以使用 `@javax.persistence.Table` 注解来指定实体类与数据库表之间的映射关系,使用 `@javax.persistence.Column` 注解来指定实体类属性与数据库列之间的映射关系。 例如,如果您想要将一个名为 `Person` 的实体类映射到一个名为 `person_info` 的数据库表上,您可以使用以下注解: ```java @Entity @Table(name = "person_info") public class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "full_name") private String fullName; @Column(name = "age") private int age; // 省略 getter 和 setter 方法 } ``` 在上面的例子中,`@Table(name = "person_info")` 注解指定了 `Person` 实体类与 `person_info` 数据库表之间的映射关系,`@Column(name = "full_name")` 注解指定了 `fullName` 属性与 `full_name` 数据库列之间的映射关系,`@Column(name = "age")` 注解指定了 `age` 属性与 `age` 数据库列之间的映射关系。 您也可以自定义自己的注解来简化实体类的编写工作。例如: ```java @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface EntityMapping { String tableName(); String[] columnNames(); } ``` 上面的代码定义了一个 `@EntityMapping` 注解,用于指定实体类的映射关系。您可以将这个注解应用到实体类上,如下所示: ```java @Entity @EntityMapping(tableName = "person_info", columnNames = {"full_name", "age"}) public class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String fullName; private int age; // 省略 getter 和 setter 方法 } ``` 在上面的例子中,`@EntityMapping(tableName = "person_info", columnNames = {"full_name", "age"})` 注解指定了 `Person` 实体类与 `person_info` 数据库表之间的映射关系,以及 `fullName` 和 `age` 属性与数据库表中的哪些列之间的映射关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧浩海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值