Hibernate注解开发步骤

在编写Hibernate的时候,需要将实体类映射到数据库中的表。通常需要一个配置文件(hibernate.cfg.xml),一个实体类(XX.java),还有一个映射文件(XX.hbm.xml)。从JAVA5.0之后,可以利用注解来简化配置。简单来说就是不再需要映射文件了,hibernate需要的元数据(metadata)通过注解实体类就行了。

 

下面是一个简单的基于注解映射的Hibernate Hello World项目:

 

用到的工具和技术:1.Eclipse4.2.2

     hibernate-annotations.jar 

           hibernate-commons-annotations.jar (Hibernate中支持注解开发的jar包) 

            ejb3-persistence.jar(API规范的jar包) 

             slf4j/slf4j-api-1.5.0.jar 
             slf4j-log4j12-1.5.0.jar 
             log4j-1.2.15.jar  (支持日志输出的jar包,注意版本的匹配) 

 

首先是项目的整体架构:

 

项目的依赖(pom.xml):

 

[html]  view plain copy
 
  1. <dependencies>  
  2.   <dependency>  
  3.     <groupId>junit</groupId>  
  4.     <artifactId>junit</artifactId>  
  5.     <version>3.8.1</version>  
  6.     <scope>test</scope>  
  7.   </dependency>  
  8.   <dependency>  
  9.     <groupId>org.hibernate</groupId>  
  10.     <artifactId>hibernate-core</artifactId>  
  11.     <version>4.2.2.Final</version>  
  12.   </dependency>  
  13. </dependencies>  


JPA jar包在hibernate3.6之后被放入hibernate-core包中。

 

 

Hibernate的配置文件(hibernate.cfg.xml):

 

[html]  view plain copy
 
  1. <?xml version='1.0' encoding='utf-8'?>  
  2. <!DOCTYPE hibernate-configuration PUBLIC  
  3.         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  4.         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  
  5.   
  6. <hibernate-configuration>  
  7.   
  8.     <session-factory>  
  9.   
  10.         <!-- Database connection settings -->  
  11.         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>  
  12.         <property name="connection.url">jdbc:mysql://localhost:3306/test</property>  
  13.         <property name="connection.username">username</property>  
  14.         <property name="connection.password">password</property>  
  15.   
  16.   
  17.         <!-- SQL dialect -->  
  18.         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
  19.   
  20.   
  21.         <!-- Echo all executed SQL to stdout -->  
  22.         <property name="show_sql">true</property>  
  23.         <property name="format_sql">true</property>  
  24.         <!-- Drop and re-create the database schema on startup -->  
  25.         <property name="hbm2ddl.auto">update</property>  
  26.   
  27.         <mapping class="org.hibernate.test.tutorial.Person" />  
  28.     </session-factory>  
  29.   
  30. </hibernate-configuration>  


注意:需要在Mysql数据库中创建一个test数据库 CREATE DATABASE test

 

 

一个简单的实体类:

 

[java]  view plain copy
 
  1. package org.hibernate.test.tutorial;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.Date;  
  5.   
  6. import javax.persistence.Column;  
  7. import javax.persistence.Entity;  
  8. import javax.persistence.GeneratedValue;  
  9. import javax.persistence.GenerationType;  
  10. import javax.persistence.Id;  
  11. import javax.persistence.Table;  
  12. import javax.persistence.Temporal;  
  13. import javax.persistence.TemporalType;  
  14.   
  15. @Entity  
  16. @Table(name="T_PERSONS")  
  17. public class Person implements Serializable {  
  18.   
  19.     private static final long serialVersionUID = 1L;  
  20.       
  21.     private Long id;  
  22.     private String name;  
  23.     private double age;  
  24.     private Date birth;  
  25.       
  26.     @Id  
  27.     @GeneratedValue(strategy=GenerationType.AUTO)  
  28.     @Column(name="ID",unique=true)  
  29.     public Long getId() {  
  30.         return id;  
  31.     }  
  32.       
  33.     @SuppressWarnings("unused")  
  34.     private void setId(Long id) {  
  35.         this.id = id;  
  36.     }  
  37.       
  38.     @Column(name="NAME",length=20)  
  39.     public String getName() {  
  40.         return name;  
  41.     }  
  42.       
  43.     public void setName(String name) {  
  44.         this.name = name;  
  45.     }  
  46.       
  47.     @Column(name="AGE")  
  48.     public double getAge() {  
  49.         return age;  
  50.     }  
  51.       
  52.     public void setAge(double age) {  
  53.         this.age = age;  
  54.     }  
  55.       
  56.     @Temporal(TemporalType.DATE)  
  57.     @Column(name="BIRTH_DATE")  
  58.     public Date getBirth() {  
  59.         return birth;  
  60.     }  
  61.     public void setBirth(Date birth) {  
  62.         this.birth = birth;  
  63.     }  
  64.   
  65. }  


注意需要在Hibernate配置文件中注册该实体类: <mapping class="org.hibernate.test.tutorial.Person" />

 

 

最后编写一个运行程序:

 

[java]  view plain copy
 
  1. public static void main( String[] args )  
  2. {  
  3.     SessionFactory factory = new AnnotationConfiguration().configure().buildSessionFactory();  
  4.     Session session = factory.openSession();  
  5.       
  6.     session.beginTransaction(); // 开启事务  
  7.       
  8.     try{  
  9.     Person p = new Person();  
  10.     p.setName("Benson");  
  11.     p.setAge(22);  
  12.     p.setBirth(new Date());  
  13.       
  14.     session.save(p);  
  15.     } catch(Exception e) {  
  16.         e.printStackTrace();  
  17.         session.getTransaction().rollback();    // 回滚事务  
  18.     }  
  19.       
  20.     session.getTransaction().commit();  // 提交事务  
  21. }  


运行之后,可以在Ecilpse控制台观察到Hibernate为我们自动生成的格式化后的SQL:

 

 

[plain]  view plain copy
 
  1. Hibernate:   
  2.     insert   
  3.     into  
  4.         T_PERSONS  
  5.         (AGE, BIRTH_DATE, NAME)   
  6.     values  
  7.         (?, ?, ?)  


进入Mysql控制台,可以查看到自动生成(hibernate.hbm2dll.auto)的表和插入的记录。

猜你喜欢

转载自collegeyuan.iteye.com/blog/2253003