`
zznj1123
  • 浏览: 123212 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

学习JPA——Hibernate Annotation使用实例

阅读更多

目前,JPAJava Persistence API)的使用范围越来越广,作为Java EE 5.0平台标准的ORM规范,得到了诸如:HibernateTopLinkOpenJpaORM框架的支持,同时还是EJB 3.0的重要组成部分。JPA的宗旨是为POJO提供持久化标准规范。它能够脱离容器独立运行,方便开发和测试。本文将通过一个小实例来说明如何在Hibernate中使用JPA,来达到简化编程的目的。
    开发环境  Eclipse 3.3.1  MyEclipse 6.0.1GA  Tomcat 6.10  SQL Server 2000 
            hibernate-3.2.5.GA  hibernate-annotations-3.3.0.GA
            ejb3-persistence  hibernate-commons-annotations-3.0.0.GA
    本文是为后续的多种Ajax技术框架应用系列作一个前期准备,让大家先了解一下相比与以前的Hibernate ORM映射的不同之处,以及采用JPA所带来的好处。
    为了保证程序能顺序运行,避免不同的Eclipse版本之间产生错误,大象强烈建议,下载源码后,按源码中的工程名,自己单独新建同一个工程,再将srcWEB-INF/lib目录下的所有文件COPY至对应的目录下。
    1、创建Web Project
       点击"File"->"New",选择"Web Project",在"Project Name"中输入ajax,点击"Finish"。下载本文后面需要用到的JAR包,加入到WEB-INF/lib目录下,在ajax工程中,文本采用的是UTF-8编码。
    2、创建HibernateSessionFactory
       传统的方法就是在工程名上点右键,选择”MyEclipse”->”Add Hibernate Capabilities”,然后就是按照提示一步一步做,不过在MyEclipse 6.0.1中添加Hibernate还是只能支持3.1,除非你选择” Add Spring Capabilities”,里面才有Hibernate 3.2的类库,要想完全兼容JPA,必须采用3.2以上版本。

       这里大家直接使用源码中的HibernateSessionFactory,注意请先建包:com.ajax.core,HibernateSessionFactory中有一个地方需要改动,原来的写法是:

    private static Configuration configuration = new Configuration();
       修改后为:
    private static AnnotationConfiguration configuration = new AnnotationConfiguration();
       因为我们采用的是JPA注释方式来映射实体,另外AnnotationConfiguration这个类在hibernate-annotations.jar这个包中。
    3、创建BaseDao
       在com.ajax.core包下面新建BaseDao抽象类,里面定义的是持久化操作方法,有一点特别要注意,一定要在增加、删除、修改这几个方法中加入事务控制,不管是在BaseDao基类方法中加,还是在业务方法中加,一定要加事务控制,大象觉得在基类中加会比较好一点,这样做代码显得更少更简洁。如果不加事务控制,那么增、删、改这些操作都不会产生效果,因为默认情况下,它不会进行自动提交。在做这个例子的时候,这个问题曾经困扰了我好长时间。因此,请大家记住不要再犯和大象一样的错误!贴出部分代码,详情请看源码,里面有很全面的注释。
/**
 * 抽象Dao类,用于持久化操作
 * @author 菠萝大象
 * @version 1.0
 */
public abstract class BaseDao<T> {

    
private static Log log = LogFactory.getLog(BaseDao.class);
    
    
/**
     * 获取Hibernate的Session对象
     */

    
public Session getSession(){
        
return HibernateSessionFactory.getSession();
    }
    
    
/**
     * 根据主键得到对象
     */

    
public T getObject(Class clazz, Serializable id){
        
return (T)getSession().get(clazz, id);
    }
    
    
/**
     * 保存对象
     */

    
public void saveObject(T t) {
        Session session 
= getSession();
        Transaction tx 
= beginTransaction(session);
        
try{
            session.saveOrUpdate(t);
            tx.commit();
        }
catch(Exception e){
            tx.rollback();
            log.error(
"保存对象失败");
        }
    }
    
    
/**
     * 创建事务
     */

    
private Transaction beginTransaction(Session session){
        
return session.beginTransaction();
    }
}
    4、创建Employee
       在com.ajax.employee.mode包下新建Employee类,这个就是POJO类,下面来详细说明里面的含义。
@Entity
@Table(name 
= "EMPLOYEE")
public class Employee implements java.io.Serializable{
    
    
private Integer employee_id; //人员ID(主键)
    private String employee_name; //人员姓名
    private String sex; //性别
    private String birthday; //出生日期
    private String address; //地址
    
    @Id
    @Column(name 
= "EMPLOYEE_ID")
    @TableGenerator(
         name
="tab-store",
         table
="GENERATOR_TABLE",
         pkColumnName 
= "G_KEY",
         pkColumnValue
="EMPLOYEE_PK",
         valueColumnName 
= "G_VALUE",
         allocationSize
=1
    )
    @GeneratedValue(strategy 
= GenerationType.TABLE,generator="tab-store")
    
public Integer getEmployee_id() {
        
return employee_id;
    }
    
public void setEmployee_id(Integer employee_id) {
        
this.employee_id = employee_id;
    }

}
       其它几个属性的gettersetter省略,这里我们要用到ejb3-persistence.jar,JPA的注解类就在这个包中,下面详细说明上面使用到的注解。
      @Entity通过@Entity注解将一个类声明为一个实体bean
      @Table通过 @Table注解可以为实体bean映射指定表,name属性表示实体所对应表的名称,如果没有定义 @Table,那么系统自动使用默认值:实体的类名(不带包名)
      @Id用于标记属性的主键
      @Column表示持久化属性所映射表中的字段,如果属性名与表中的字段名相同,则可以省略@Column注解,另外有两种方式标记,一是放在属性前,另一种是放在getter方法前,例如:
    @Column(name = "EMPLOYEE_NAME")
    
private String employee_name;
       或者
    @Column(name = "EMPLOYEE_NAME")
    
public String getEmployee_name() {
        
return employee_name;
    }
       这两种方式都是正解的,根据个人喜好来选择。大象偏向于第二种,并且喜欢将属性名与字段名设成一样的,这样可以省掉@Column注解,使代码更简洁。
      @TableGenerator表生成器,将当前主键的值单独保存到一个数据库表中,主键的值每次都是从指定的表中查询来获得,这种生成主键的方式是很常用的。这种方法生成主键的策略可以适用于任何数据库,不必担心不同数据库不兼容造成的问题。大象推荐这种方式管理主键,很方便,集中式管理表的主键,而且更换数据库不会造成很大的问题。各属性含义如下:
        name表示该表主键生成策略的名称,这个名字可以自定义,它被引用在@GeneratedValue中设置的"generator"值中
        table表示表生成策略所持久化的表名,说简单点就是一个管理其它表主键的表,本例中,这个表名为GENERATOR_TABLE
        pkColumnName表生成器中的列名,用来存放其它表的主键键名,这个列名是与表中的字段对应的
        pkColumnValue实体表所对应到生成器表中的主键名,这个键名是可以自定义滴
        valueColumnName表生成器中的列名,实体表主键的下一个值,假设EMPLOYEE表中的EMPLOYEE_ID最大为2,那么此时,生成器表中与实体表主键对应的键名值则为3
        allocationSize表示每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50

      @GeneratedValue定义主键生成策略,这里因为使用的是TableGenerator,所以,主键的生成策略为GenerationType.TABLE生成主键策略的名称则为前面定义的tab-store
       这里大象想说下,网上有很多文章写的是strategy = GenerationType.AUTO或是strategy = GenerationType.SEQUENCE,采用SEQUENCE序列是因为Oracle数据中不支持identity自动增长,要想使用它,还得在数据库中创建一个序列,如果要更换数据库,那将是一个非常麻烦的事情。SEQUENCE生成方式我们暂且不谈,这里说下采用AUTOIDENTITY的生成方式,本例采用的是<sp>
分享到:
评论

相关推荐

    jpa学习资料,这是一份包括源代码的学习资料

    jpa的一个实例学习JPA——Hibernate Annotation使用实例

    hibernate annotation hibernate3

    Hibernate 3是Hibernate ORM框架的一个重要版本,它引入了许多新特性,如对JPA(Java Persistence API)的支持,以及对注解的广泛使用。这一版本的更新使得Hibernate更加易于使用,同时也提高了代码的可读性和可维护...

    Spring + JPA + Hibernate配置

    通过上述步骤,你可以在Spring环境中顺利地集成和使用JPA及Hibernate,实现高效的数据持久化操作。记住,理解每个组件的作用以及它们如何协同工作是至关重要的,这样你才能灵活应对各种开发需求。

    Hibernate Annotation入门

    这篇博文将带你了解如何使用Hibernate Annotation进行开发。 首先,我们需要理解Java注解的基本概念。注解是一种元数据,它提供了在编译时或运行时处理类、方法和属性的能力。在Hibernate中,注解用于声明实体类...

    hibernate-Annotation.jar

    Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程方式来操作数据库,极大地简化了Java开发中的数据访问层。在Hibernate 3.x版本中,引入了Annotation注解,这是一种元数据的方式,...

    hibernate_annotation中文版

    本文将详细解析Hibernate Annotation的相关知识,旨在为使用Hibernate注解进行开发的朋友们提供详尽的指导。 一、Hibernate Annotation概述 在Hibernate早期版本中,对象-关系映射主要依赖XML配置文件来完成。然而...

    spring整合jpa简单实例

    如果使用Maven,我们需要在pom.xml文件中加入Spring、Spring Data JPA和Hibernate的相关依赖。例如: ```xml &lt;!-- Spring framework --&gt; &lt;groupId&gt;org.springframework &lt;artifactId&gt;spring-context ...

    hibernate annotation

    在`Hiberante_annptation.one`和`Hibernate_annotation`这两个文件中,很可能包含了使用Hibernate注解的实例代码。通过阅读和分析这些代码,你可以看到如何将实体类、主键策略、表和字段映射以及关联关系具体实现。...

    spring_hibernate_annotation的三种实现

    以下将详细介绍"spring_hibernate_annotation的三种实现"。 1. **基于XML的配置** 在早期的Spring和Hibernate集成中,通常使用XML配置文件来定义Bean和数据源,以及映射信息。Spring的`applicationContext.xml`...

    annotation(注释)版本的hibernate

    本文将深入探讨"注释版本的Hibernate",结合具体实例,帮助读者理解如何使用注解来实现对象关系映射(ORM)。 一、Hibernate概述 Hibernate是一个开源的对象关系映射框架,它允许开发者用面向对象的方式处理数据库...

    JPA搭建环境所需的jar包

    5. **Annotation Processor**:如Hibernate的`hibernate-jpa-2.1-api.jar`,这个包包含了JPA 2.1的元数据处理器,有助于编译时的验证。 6. **Entity Manager Factory** 和 **Persistence Unit**:这两个是JPA的核心...

    Spring-data-jpa常用教程.pdf

    - 通过 `&lt;tx:annotation-driven/&gt;` 标签或相应的 Java 配置启用 Spring 的事务管理功能,这样可以在 Service 层使用 `@Transactional` 注解来声明式地管理事务。 5. **使用 Repository 接口**: - 在 Service 层...

    JPA配置需要的jar

    5. **Annotation Processor**:对于使用注解(如@Entity、@Table等)进行ORM配置的情况,可能还需要`hibernate-jpa-2.1-api.jar`或者`hibernate-annotations.jar`,这些jar包含了解析和处理JPA注解的类。 6. **...

    JPA连接MySql搭建HelloWorld示例代码

    在本示例中,我们将学习如何使用JPA连接到MySQL数据库并创建一个简单的"Hello, World!"应用程序。 首先,我们需要确保已安装了MySQL数据库并创建了一个测试数据库。然后,确保JPA的实现,如Hibernate,已在项目中...

    hibernate-annotations 相关jar包

    4. 创建SessionFactory:根据配置文件创建SessionFactory实例,它是Hibernate的核心,用于生成Session。 5. 操作数据库:通过SessionFactory获取Session,进行CRUD操作。 **四、优势** 1. 简化配置:通过注解方式...

    hibernate所有开发包

    包括Hibernate核心库、JTA事务管理、JPA规范实现等,使用这些jar包,开发者可以轻松实现Java项目中的ORM功能,利用Hibernate的强大功能进行数据库操作,同时支持Annotation配置,简化了开发过程。

    JPA开发文档API

    ORM框架如Hibernate、EclipseLink和JPA等,允许开发者以面向对象的方式处理数据,无需关心底层的SQL细节。 2. **JPA体系架构** - JPA提供了一种标准的API和元数据模型,用于定义Java对象如何映射到数据库表。这...

    SpringIOC_SpringMVC_SpringAnnotation_JPA

    标题“SpringIOC_SpringMVC_SpringAnnotation_JPA”涵盖了四个关键的Java开发框架和概念:Spring IOC(Inversion of Control,控制反转),Spring MVC(Model-View-Controller),Spring注解,以及JPA(Java ...

    hibernate的anntation,可是看看,对于学习hibernate很有帮助

    在本文中,我们将深入探讨Hibernate的注解(Annotation)特性,这对于理解和使用Hibernate进行开发非常有帮助。 ## Hibernate注解简介 在Hibernate早期版本中,数据库映射主要依赖于XML配置文件。然而,随着注解的...

Global site tag (gtag.js) - Google Analytics