解析Java的Hibernate框架中的持久化类和映射文件

 更新时间:2015年12月14日 08:48:14   投稿:goldensun  
这篇文章主要介绍了Java的Hibernate框架中的持久化类和映射文件,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下

持久化类
Hibernate的整个概念是采取从Java类属性的值,并将持久到数据库表。一个映射文件Hibernate的帮助确定如何从拉动类的值,并将它们映射与表和相关的域。

其对象或实例将存储在数据库表中的Java类在Hibernate中称为持久化类。 Hibernate的效果最好,如果这些类遵循一些简单的规则,也称为普通Java对象(POJO)编程模型。有下列持久化类的主要规则,但是,这些规则并不是必需的。

将所有的持久化Java类需要一个默认的构造函数。

所有类应该包含为了让容易识别对象内Hibernate和数据库的ID。此属性映射到数据库表的主键列。

所有属性将被持久化应该声明为private,并已在JavaBean风格的定义的getXXX和setXXX方法。

Hibernate的关键功能,代理,取决于持久化类或者是非final的,或者说声明的所有公共方法的接口的实现。

所有的类不扩展或实现的EJB框架需要进行一些专门的类和接口。

POJO名称用于强调一个给定的对象是一个普通的Java对象,而不是一个特殊的对象,好更不是Enterprise JavaBean。

一个简单的POJO例子:
基于上面提到的一些规则,我们可以如下定义一个POJO类:

public class Employee {
  private int id;
  private String firstName; 
  private String lastName;  
  private int salary; 

  public Employee() {}
  public Employee(String fname, String lname, int salary) {
   this.firstName = fname;
   this.lastName = lname;
   this.salary = salary;
  }
  public int getId() {
   return id;
  }
  public void setId( int id ) {
   this.id = id;
  }
  public String getFirstName() {
   return firstName;
  }
  public void setFirstName( String first_name ) {
   this.firstName = first_name;
  }
  public String getLastName() {
   return lastName;
  }
  public void setLastName( String last_name ) {
   this.lastName = last_name;
  }
  public int getSalary() {
   return salary;
  }
  public void setSalary( int salary ) {
   this.salary = salary;
  }
}


映射文件
对象/关系映射的XML文档中通常被定义。这个映射文件指示Hibernate如何定义的一个或多个类映射到数据库表。

虽然很多Hibernate用户选择手工编写XML中,有一些工具可以用来生成映射文档。包括XDoclet,Middlegen和AndroMDA等用于高级Hibernate的用户。

让我们考虑我们的对象将坚持在下一节中定义的表前面定义的POJO类。

public class Employee {
  private int id;
  private String firstName; 
  private String lastName;  
  private int salary; 

  public Employee() {}
  public Employee(String fname, String lname, int salary) {
   this.firstName = fname;
   this.lastName = lname;
   this.salary = salary;
  }
  public int getId() {
   return id;
  }
  public void setId( int id ) {
   this.id = id;
  }
  public String getFirstName() {
   return firstName;
  }
  public void setFirstName( String first_name ) {
   this.firstName = first_name;
  }
  public String getLastName() {
   return lastName;
  }
  public void setLastName( String last_name ) {
   this.lastName = last_name;
  }
  public int getSalary() {
   return salary;
  }
  public void setSalary( int salary ) {
   this.salary = salary;
  }
}

会有一个表对应于每一个对象,你愿意提供持久性。考虑上述目的需要存储和检索到下面的RDBMS表:

create table EMPLOYEE (
  id INT NOT NULL auto_increment,
  first_name VARCHAR(20) default NULL,
  last_name VARCHAR(20) default NULL,
  salary   INT default NULL,
  PRIMARY KEY (id)
);

基于以上两个实体,我们可以定义它指示Hibernate如何定义的一个或多个类映射到数据库表下面的映射文件。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD//EN"
 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping>
  <class name="Employee" table="EMPLOYEE">
   <meta attribute="class-description">
     This class contains the employee detail. 
   </meta>
   <id name="id" type="int" column="id">
     <generator class="native"/>
   </id>
   <property name="firstName" column="first_name" type="string"/>
   <property name="lastName" column="last_name" type="string"/>
   <property name="salary" column="salary" type="int"/>
  </class>
</hibernate-mapping>

保存的映射文件中的格式: <classname>.hbm.xml。我们保存映射文件中的文件Employee.hbm.xml。来看看关于在映射文件中使用的映射元素的小细节:

映射文档是具有<hibernate-mapping>为包含所有的<class>元素的根元素的XML文档。

在<class>元素被用于定义数据库表从一个Java类特定的映射。 Java类名指定使用class元素的name属性和使用表属性数据库表名指定。

<meta>元素是可选元素,可以用来创建类的描述。

<id>元素映射在类中的唯一ID属性到数据库表的主键。 id元素的name属性是指属性的类和column属性是指在数据库表中的列。 type属性保存了Hibernate映射类型,这种类型的映射将会从Java转换为SQL数据类型。

id元素内的<generator>元素被用来自动生成的主键值。将生成元素的class属性设置为原生让Hibernate拿起无论是identity,sequence或者hilo中的算法来创建主键根据底层数据库的支持能力。

<property>元素用于一个Java类的属性映射到数据库表中的列。元素的name属性是指属性的类和column属性是指在数据库表中的列。 type属性保存了Hibernate映射类型,这种类型的映射将会从Java转换为SQL数据类型。

还有这将在映射文件中使用,接下来尽量覆盖尽可能多其他的Hibernate相关主题的其他属性和可用的元素。

相关文章

  • java小程序之控制台字符动画的实现

    java小程序之控制台字符动画的实现

    这篇文章主要给大家介绍了java小程序之控制台字符动画实现的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • JavaWeb实战之开发网上购物系统(超详细)

    JavaWeb实战之开发网上购物系统(超详细)

    这篇文章主要介绍了JavaWeb实战之开发网上购物系统(超详细),文中有非常详细的代码示例,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-04-04
  • java实现哈夫曼压缩与解压缩的方法

    java实现哈夫曼压缩与解压缩的方法

    这篇文章主要介绍了java实现哈夫曼压缩与解压缩的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • SpringBoot整合RocketMQ的方法详解

    SpringBoot整合RocketMQ的方法详解

    这篇文章主要为大家详细介绍了SpringBoot整合RocketMQ的方法,文中的示例代码讲解详细,对我们学习有一定帮助,感兴趣的小伙伴可以了解一下
    2022-08-08
  • lombok 子类中如何使用@Builder问题

    lombok 子类中如何使用@Builder问题

    这篇文章主要介绍了lombok 子类中如何使用@Builder问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • 解决Java调用BAT批处理不弹出cmd窗口的方法分析

    解决Java调用BAT批处理不弹出cmd窗口的方法分析

    本篇文章是对Java调用BAT批处理不弹出cmd窗口的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 使用mybatis格式化查询出的日期

    使用mybatis格式化查询出的日期

    这篇文章主要介绍了使用mybatis格式化查询出的日期,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java 中Buffer源码的分析

    java 中Buffer源码的分析

    这篇文章主要介绍了java 中Buffer源码的分析的相关资料,需要的朋友可以参考下
    2017-06-06
  • MYSQL批量插入数据的实现代码

    MYSQL批量插入数据的实现代码

    非常的实现原理,代码较多,建议大家仔细看看。
    2008-10-10
  • ScheduledThreadPoolExecutor巨坑解决

    ScheduledThreadPoolExecutor巨坑解决

    这篇文章主要为大家介绍了使用ScheduledThreadPoolExecutor遇到的巨坑解决示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02

最新评论