Hibernate使用注释
  Op9yysgqYUmV 2023年11月02日 64 0


承接上节,我们已经写了一个例子了,这节我们使用注释创建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();
}

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

Hibernate使用注释_持久化


源代码

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: Jedis使用指南 下一篇: Hieberate入门程序
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
Op9yysgqYUmV