`
collegeyuan
  • 浏览: 29598 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

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 plaincopy
 
  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 plaincopy
 
  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 plaincopy
 
  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 plaincopy
 
  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 plaincopy
 
  1. Hibernate:   
  2.     insert   
  3.     into  
  4.         T_PERSONS  
  5.         (AGE, BIRTH_DATE, NAME)   
  6.     values  
  7.         (?, ?, ?)  


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

分享到:
评论

相关推荐

    基于Maven,Struts2, Spring,Hibernate全注释的开发框架

    使用Maven3.0.5, Struts2, Spring, Hibernate3, annotation实现零配置的开发框架.里面有详细的开发指导文档, 后台用googlecode的 hibernate-generic-dao - Generic DAO 和 Search的代码,完全进行封装. 由于Generic ...

    ssh框架整合step by step (springMVC + spring 5.0.4 + hibernate 5.0.12)

    # 使用entity/dao/service全部使用注解扫描, 大大减少再开发的代码量; # 事务的织入: 开发时不必再处理SessionFactory、Session等, 只要按配置文件指定的格式对方法进行命名, 即可自动开启/提交事务; # 做了BaseDao...

    SSH2项目(WeExam)源码

    大量使用了Hibernate和Spring的注解 配置步骤: 安装Tomcat及Mysql后: 1、新建WeExam的数据库 2、修改src/jdbc.properties内的连接参数,及test/hibernate.cfg.xml(用于单元测试)的连接参数 3、打开一下连接...

    SpringBoot中使用Spring-data-jpa分页查询

    SpringBoot是一款基于Spring框架的开发框架,而Spring-data-JPA是在Hibernate的基础上实现JPA规范的ORM框架。使用SpringBoot和Spring-data-jpa进行分页查询可以大大简化编码流程并提高开发效率。 在使用Spring-data...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

    Java高级程序设计实战教程第三章-Java反射机制.pptx

    3.1 应用场景 在一些开源框架里,如Spring,Struts,Hibernate,MyBatis等,应用程序会提供一个配置文件如xml文件或者properties,然后在Java类里面解析xml或properties里面的内容,得到一个字符串,然后用反射机制...

    Spring攻略(第二版 中文高清版).part2

    1.10 用@Required注解检查属性 34 1.10.1 问题 34 1.10.2 解决方案 34 1.10.3 工作原理 34 1.11 用XML配置自动装配Bean 36 1.11.1 问题 36 1.11.2 解决方案 36 1.11.3 工作原理 37 1.12 用@...

    Spring攻略(第二版 中文高清版).part1

    1.10 用@Required注解检查属性 34 1.10.1 问题 34 1.10.2 解决方案 34 1.10.3 工作原理 34 1.11 用XML配置自动装配Bean 36 1.11.1 问题 36 1.11.2 解决方案 36 1.11.3 工作原理 37 1.12 用@...

    JAVA上百实例源码以及开源项目

    此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...

    JAVA上百实例源码以及开源项目源代码

    此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...

    cms后台管理

    解压缩jeecms-3.0.2-final-src,在src文件夹下会看到有三个压缩文件,如果只想进行普通的二次开发,可以只导入cms这个源码,删除jeecms-cms-identity-3.0.2-final.jar即可,如果想进行深入的二次开发,需要导入...

Global site tag (gtag.js) - Google Analytics