注释

    Hibernate 注释是一种强大的来给对象和关系映射表提供元数据的方法。所有的元数据被添加到 POJO java 文件代码中,这有利于用户在开发时更好的理解表的结构和 POJO。

    如果你想让你的应用程序移植到其它 EJB 3 的 ORM 应用程序中,您必须使用注释来表示映射信息,但是如果想要得到更大的灵活性,那么你应该使用基于 XML 的映射。

    首先你必须确定你使用的是 JDK 5.0,否则你需要升级你的 JDK 至 JDK 5.0,来使你的主机能够支持注释。

    其次,你需要安装 Hibernate 3.x 注释包,可以从 sourceforge 行下载: 并且从 Hibernate 注释发布中拷贝 hibernate-annotations.jar, lib/hibernate-comons-annotations.jarlib/ejb3-persistence.jar 到你的 CLASSPATH。

    注释类示例

    正如我上面所提到的,所有的元数据被添加到 POJO java 文件代码中,这有利于用户在开发时更好的理解表的结构和 POJO。

    以下是用带有注释的 Employee 类来映射使用定义好的 Employee 表的对象:

    1. @Entity
    2. @Table(name = "EMPLOYEE")
    3. public class Employee {
    4. @Id @GeneratedValue
    5. @Column(name = "id")
    6. private int id;
    7. @Column(name = "first_name")
    8. private String firstName;
    9. @Column(name = "last_name")
    10. private String lastName;
    11. @Column(name = "salary")
    12. private int salary;
    13. public Employee() {}
    14. public int getId() {
    15. return id;
    16. }
    17. this.id = id;
    18. }
    19. public String getFirstName() {
    20. }
    21. public void setFirstName( String first_name ) {
    22. this.firstName = first_name;
    23. }
    24. public String getLastName() {
    25. return lastName;
    26. }
    27. public void setLastName( String last_name ) {
    28. this.lastName = last_name;
    29. }
    30. public int getSalary() {
    31. return salary;
    32. }
    33. public void setSalary( int salary ) {
    34. this.salary = salary;
    35. }
    36. }

    Hibernate 检测到 @Id 注释字段并且认定它应该在运行时通过字段直接访问一个对象上的属性。如果你将 @Id 注释放在 getId() 方法中,你可以通过默认的 getter 和 setter 方法来访问属性。因此,所有其它注释也放在字段或是 getter 方法中,决定于选择的策略。下一节将解释上面的类中使用的注释。

    @Entity 注释

    EJB 3 标准的注释包含在 javax.persistence 包,所以我们第一步需要导入这个包。第二步我们对 Employee 类使用 @Entity 注释,标志着这个类为一个实体 bean,所以它必须含有一个没有参数的构造函数并且在可保护范围是可见的。

    @table 注释允许您明确表的详细信息保证实体在数据库中持续存在。

    @table 注释提供了四个属性,允许您覆盖的表的名称,目录及其模式,在表中可以对列制定独特的约束。现在我们使用的是表名为 EMPLOYEE。

    @Id 和 @GeneratedValue 注释

    默认情况下,@Id 注释将自动确定最合适的主键生成策略,但是你可以通过使用 @GeneratedValue 注释来覆盖掉它。strategygenerator 这两个参数我不打算在这里讨论,所以我们只使用默认键生成策略。让 Hibernate 确定使用哪些生成器类型来使代码移植于不同的数据库之间。

    @Column Annotation

    @Column 注释用于指定某一列与某一个字段或是属性映射的细节信息。您可以使用下列注释的最常用的属性:

    • name 属性允许显式地指定列的名称。
    • length 属性为用于映射一个值,特别为一个字符串值的列的大小。
    • nullable 属性允许当生成模式时,一个列可以被标记为非空。
    • unique 属性允许列中只能含有唯一的内容

    最后,我们将创建应用程序类,并使用 main() 方法来运行应用程序。我们将使用此应用程序来保存一些员工的记录,然后我们对这些记录进行 CRUD 操作。

    数据库配置

    现在,让我们创建 hibernate.cfg.xml 配置文件来定义数据库相关参数。

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <!DOCTYPE hibernate-configuration SYSTEM
    3. "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    4. <hibernate-configuration>
    5. <session-factory>
    6. org.hibernate.dialect.MySQLDialect
    7. <property name="hibernate.connection.driver_class">
    8. com.mysql.jdbc.Driver
    9. </property>
    10. <!-- Assume students is the database name -->
    11. <property name="hibernate.connection.url">
    12. jdbc:mysql://localhost/test
    13. </property>
    14. <property name="hibernate.connection.username">
    15. root
    16. </property>
    17. <property name="hibernate.connection.password">
    18. cohondob
    19. </property>
    20. </session-factory>
    21. </hibernate-configuration>

    编译和执行

    这里是编译并运行以上提到的应用程序的步骤。再继续编译和运行之前需要确保你正确设置路径和类路径。

    • 从目录中删除 Employee.hbm.xml 映射文件。
    • 创建上述 Employee.java 源文件并编译。
    • 创建上述 ManageEmployee.java 源文件并编译。
    • 执行 ManageEmployee 二进制程序。

    如果你查看 EMPLOYEE 表,它将有如下记录:

    1. mysql> select * from EMPLOYEE;
    2. +----+------------+-----------+--------+
    3. | id | first_name | last_name | salary |
    4. +----+------------+-----------+--------+
    5. | 29 | Zara | Ali | 5000 |
    6. | 31 | John | Paul | 10000 |
    7. +----+------------+-----------+--------+
    8. 2 rows in set (0.00 sec
    9. mysql>