Hibernate使用注释

简介: 承接上节,我们已经写了一个例子了,这节我们使用注释创建hibernate应用程序。 有许多注释可用于创建hibernate应用程序,如@Entity,@Id,@Table等。
承接上节,我们已经写了一个例子了,这节我们使用注释创建hibernate应用程序。 有许多注释可用于创建hibernate应用程序,如@Entity,@Id,@Table等。
Hibernate注释基于JPA 2规范,并支持所有功能。
所有JPA注释都在javax.persistence.*包中定义。 Hibernate EntityManager实现由JPA规范定义的接口和生命周期。
使用hibernate注释的核心优点是我们不需要创建映射(*.hbm.xml)文件直接创建对象关联。 在这里,hibernate注释用于提供元数据。
使用注释创建hibernate应用程序
创建具有注释的hibernate应用程序有4个步骤。分别如下:
● 添加数据库和Hibernate的依赖文件
● 使用注释创建持久化类
● 在配置文件中添加持久化类的映射
● 创建检索或存储持久对象的类

1、添加数据库和Hibernate的依赖文件
上节已经具体介绍了,这里就不再赘述了
2、创建持久化类
在这里,我们创建一个持久化类: User。 并使用注释完成与数据库表:user 的映射关联。
User.java 文件的代码如下 :
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
private int id;
private String name;
private String sex;

public User() {
}

public User(int id, String name, String sex) {
this.id = id;
this.name = name;
this.sex = sex;
}

@Column(name = "user_ID")
public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}
}
@Entity注释将此类标记为实体。它与映射文件中讨论的<class />映射元素的功能相同。
@Table注释指定要保留此实体的数据的表名。 如果不使用@Table注释,默认表名称将为USER。
@Id注释标记定义实体标识符的属性。
@ GeneratedValue和@GenericGenerator一起工作,表明Hibernate应该使用Hibernate的增量生成策略来实现该实体的标识符值。
@Column注释指定此属性或字段的列的详细信息。如果未指定@Column注释,则属性名称将用作列名称。
3、 在配置文件中添加持久化类的映射
打开hibernate.cfg.xml文件,并添加如下的映射资源条目:
<mapping class="annotation.User"/>
现在完整的配置文件 hibernate.cfg.xml,将如下所示:
<?xml version='1.0' encoding='UTF-8'?>
<!-- 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/first_db?serverTimezone=UTC</property>
<property name="connection.username">root</property>
<property name="connection.password">9958</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<mapping class="annotation.User"/>
</session-factory>
</hibernate-configuration>
4、 创建检索或存储持久对象的类

我们使用StandardServiceRegistryBuilder类和MetadataSources类从持久化类获取映射的信息。

private void setUp()  {
    // A SessionFactory is set up once for an application!
    final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
            .configure() // configures settings from hibernate.cfg.xml
            .build();
    try {
        sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
    } catch (Exception e) {
        // The registry would be destroyed by the SessionFactory, but we had trouble building the SessionFactory
        // so destroy it manually.
        StandardServiceRegistryBuilder.destroy(registry);
    }
}

setUp()方法首先构建一个org.hibernate.boot.registry.StandardServiceRegistry实例,该实例将配置信息合并到一组可供SessionFactory使用的服务中。使用StandardServiceRegistry,我们创建了org.hibernate.boot.MetadataSources,它是告诉Hibernate你的域模型的起点。引导过程的最后一步是构建SessionFactory。SessionFactory是一个线程安全的对象,它被实例化一次以服务于整个应用程序。SessionFactory作为org.hibernate.Session实例的工厂,这被认为是“unit of work”的必然结果。

现在再写几个测试方法:

/**
 * User,并使用save()方法将它们交给Hibernate进行管理。
 * Hibernate负责为每个事件在数据库上执行一个INSERT
 */
private void saveEntities() {
    Session session = sessionFactory.openSession();
    session.beginTransaction();
    session.save(new User(1, "Tom", "M"));
    session.save(new User(2, "Jary", "F"));
    session.getTransaction().commit();
    session.close();
}

/**
 * 获取实例集合
 */
private void entitiesList() {
    Session session = sessionFactory.openSession();
    session.beginTransaction();
    String sql= "from User";
    List result = session.createQuery(sql).list();
    for (User user : (List<User>) result) {
        System.out.println("User (" + user.getName() + ") : " + user.getSex());
    }
    session.getTransaction().commit();
    session.close();
}

运行上面示例,得到以下结果 :


源代码

相关文章
|
Java 数据库连接 网络安全
ssh框架中spring整合hibernate的配置文件模板(带详细注释)
applicationContext.xml的配置文件模板 1 2 13 14 15 16 18 19 com.
727 0
|
SQL Java 数据库连接
hibernate 3 ID策略生成器自定义,可用于注释 - 规则: 九位业务编号 + 六位日期 + 六位自增长序列
/***hibernate ID策略生成器 自定义 -  规则: 业务编号 + 日期 + 六位自增长序列*/public class MyKeyGenerator implements IdentifierGenerator, Configurable {    private static final Log log = LogFactory.
623 0
|
4月前
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate
|
1月前
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
33 1
|
28天前
|
数据库 Java 数据库连接
Struts 2 与 Hibernate 的完美邂逅:如何无缝集成两大框架,轻松玩转高效 CRUD 操作?
【8月更文挑战第31天】本文通过具体示例介绍了如何在 Struts 2 中整合 Hibernate,实现基本的 CRUD 操作。首先创建 Maven 项目并添加相关依赖,接着配置 Hibernate 并定义实体类及其映射文件。然后创建 DAO 接口及实现类处理数据库操作,再通过 Struts 2 的 Action 类处理用户请求。最后配置 `struts.xml` 文件并创建 JSP 页面展示用户列表及编辑表单。此示例展示了如何配置和使用这两个框架,使代码更加模块化和可维护。
38 0
|
2月前
|
SQL Java 数据库连接
Java面试题:简述ORM框架(如Hibernate、MyBatis)的工作原理及其优缺点。
Java面试题:简述ORM框架(如Hibernate、MyBatis)的工作原理及其优缺点。
50 0
|
3月前
|
Java 数据库连接 数据库
探索JPA生态:Hibernate与其他ORM框架的对比分析
【6月更文挑战第25天】**JPA标准下的Hibernate是流行的ORM实现,提供丰富功能如二级缓存和延迟加载,但其学习曲线较陡,性能优化复杂。相比如MyBatis,Hibernate的JPQL更面向对象,MyBatis则接近SQL。选择ORM需考虑项目需求和个人偏好。**
61 0
|
3月前
|
Java 数据库连接
杨老师课堂之JavaEE三大框架Hibernate入门第一课
杨老师课堂之JavaEE三大框架Hibernate入门第一课
26 0
|
4月前
|
SQL Java 数据库连接
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握