Hibernate使用注释

承接上节,我们已经写了一个例子了,这节我们使用注释创建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注释将此类标记为实体。它与映射文件中讨论的映射元素的功能相同。
@Table注释指定要保留此实体的数据的表名。 如果不使用@Table注释,默认表名称将为USER。
@Id注释标记定义实体标识符的属性。
@ GeneratedValue和@GenericGenerator一起工作,表明Hibernate应该使用Hibernate的增量生成策略来实现该实体的标识符值。
@Column注释指定此属性或字段的列的详细信息。如果未指定@Column注释,则属性名称将用作列名称。
3、 在配置文件中添加持久化类的映射
打开hibernate.cfg.xml文件,并添加如下的映射资源条目:

现在完整的配置文件 hibernate.cfg.xml,将如下所示:




com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/first_db?serverTimezone=UTC
root
9958
org.hibernate.dialect.MySQLDialect
true


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) result) {
        System.out.println("User (" + user.getName() + ") : " + user.getSex());
    }
    session.getTransaction().commit();
    session.close();
}

运行上面示例,得到以下结果 :
Hibernate使用注释_第1张图片


源代码

你可能感兴趣的:(Hibernate)