注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(一):消除hibernate中<mapping resouce 的xxxx. hbm.xml文件

原创 2008年10月01日 07:52:00
以下几篇文章简单的介绍一下jpa 和 spring2.5 hibernate3.2 整合配置的一个过程。纯粹个人经验只谈。如果有错误,请各位留言指出。

本系列重点是涉及 配置过程 ,对注释的用法不多介绍。

注释语法越来越多的被业界所使用,并且注释配置相对于 XML 配置具有很多的优势:它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。注释和 Java 代码位于一个文件中,而 XML 配置采用独立的配置文件,大多数配置信息在程序开发完成后都不会调整,如果配置信息和 Java 代码放在一起,有助于增强程序的内聚性。而采用独立的 XML 配置文件,程序员在编写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低开发效率。因此在很多情况下,注释配置比 XML 配置更受欢迎,注释配置有进一步流行的趋势。Spring 2.5 的一大增强就是引入了很多注释类,现在您已经可以使用注释配置完成大部分 XML 配置的功能。

首先,我们已经通过 传统的spring +hibernate方式构架成功了一个应用的后台体系。
这个体系里面 有这样几个重要的配置文件。
  1. hibernate.cfg.xml 。
    里面通过 配置 mapping来指向每张数据表单生成配置文件.xxxx.hbm.xml文件
  2. applicaitonContex.xml。
    里面通过定义一个一个bean 来配置 各个需要用到的 DAO 和 Service。
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    3. <beans >
    4.     <bean id="sessionFactory"
    5.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    6.         <property name="configLocation"
    7.             value="classpath:hibernate.cfg.xml">
    8.         </property>
    9.     </bean>
    10.     
    11.     <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    12.         <property name="sessionFactory"
    13.             <ref local="sessionFactory"/>
    14.         </property> 
    15.     </bean>
    16.     <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
    17.         <!--  事务拦截器bean需要依赖注入一个事务管理器 -->
    18.         <property name="transactionManager">
    19.             <ref local="transactionManager"/>
    20.         </property>
    21.         <property name="transactionAttributes">
    22.             <!--  下面定义事务传播属性-->
    23.             <props>
    24.                 <prop key="insert*">PROPAGATION_REQUIRED</prop>
    25.                 <prop key="update*">PROPAGATION_REQUIRED</prop>
    26.                 <prop key="save*">PROPAGATION_REQUIRED</prop>
    27.                 <prop key="add*">PROPAGATION_REQUIRED</prop>
    28.                 <prop key="update*">PROPAGATION_REQUIRED</prop>
    29.                 <prop key="remove*">PROPAGATION_REQUIRED</prop>
    30.                 <prop key="delete*">PROPAGATION_REQUIRED</prop>
    31.                 <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
    32.                 <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
    33.                 <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
    34.                 <prop key="change*">PROPAGATION_REQUIRED</prop>
    35.                 <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
    36.             </props>
    37.         </property>
    38.     </bean>
    39.     
    40.     
    41. <!-- 定义自动代理BeanNameAutoProxyCreator -->
    42. <bean id="beanNameAutoProxyCreator"
    43. class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    44. <!--  指定对满足哪些bean name的bean自动生成业务代理 -->
    45. <property name="beanNames">
    46.       <list>
    47.         <value>*Service</value>
    48.       </list>
    49.        </property>
    50. <!--  下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
    51. <property name="interceptorNames">
    52. <list>
    53. <!-- 此处可增加其他新的Interceptor -->
    54. <value>transactionInterceptor</value>
    55. </list>
    56. </property>
    57.         </bean>            
    58.     <bean id="McCityInfoDAO"
    59.         class="com.firemax.manatee.hibernate.McCityInfoDAO">
    60.         <property name="sessionFactory">
    61.             <ref bean="sessionFactory" />
    62.         </property>
    63.     </bean>
    64.     <bean id="McMaterialInfoDAO"
    65.         class="com.firemax.manatee.hibernate.McMaterialInfoDAO">
    66.         <property name="sessionFactory">
    67.             <ref bean="sessionFactory" />
    68.         </property>
    69.     </bean>
    70. </beans>
    hibernate.cfg.xml要配置这么多 xxxxx.hbm.xml文件。每次数据结构发生变化的时候。要重新去改写pojo和dao以及这些xxxxx.hbm.xml
    那么好。我们现在就用 注解的力量 去把这部分工作简化。
  • 首先我们需要 
  1. hibernate3.2 以上版本的jar
  2. jdk 5 以上的环境
  3. spring2 
  • 然后我们修改pojo的java类。加上注解。使起通过注解来取代原先要xxxx.hbm.xml里面配置的指向的数据库表单结构的信息。
  1. package com.alcor.web.hibernate;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. import javax.persistence.CascadeType;
  5. import javax.persistence.Column;
  6. import javax.persistence.Entity;
  7. import javax.persistence.FetchType;
  8. import javax.persistence.Id;
  9. import javax.persistence.JoinColumn;
  10. import javax.persistence.ManyToOne;
  11. import javax.persistence.OneToMany;
  12. import javax.persistence.Table;
  13. /**
  14.  * AlcorTCitys entity. @author MyEclipse Persistence Tools
  15.  */
  16. @Entity
  17. @Table(name = "alcor_t_citys", catalog = "alcorweb")
  18. public class AlcorTCitys implements java.io.Serializable {
  19.     // Fields
  20.     private String cityCode;
  21.     private AlcorTProvinces alcorTProvinces;
  22.     private String cityName;
  23.     private Set<AlcotTDistrict> alcotTDistricts = new HashSet<AlcotTDistrict>(0);
  24.     // Constructors
  25.     /** default constructor */
  26.     public AlcorTCitys() {
  27.     }
  28.     /** minimal constructor */
  29.     public AlcorTCitys(String cityCode, AlcorTProvinces alcorTProvinces,
  30.             String cityName) {
  31.         this.cityCode = cityCode;
  32.         this.alcorTProvinces = alcorTProvinces;
  33.         this.cityName = cityName;
  34.     }
  35.     /** full constructor */
  36.     public AlcorTCitys(String cityCode, AlcorTProvinces alcorTProvinces,
  37.             String cityName, Set<AlcotTDistrict> alcotTDistricts) {
  38.         this.cityCode = cityCode;
  39.         this.alcorTProvinces = alcorTProvinces;
  40.         this.cityName = cityName;
  41.         this.alcotTDistricts = alcotTDistricts;
  42.     }
  43.     // Property accessors
  44.     @Id
  45.     @Column(name = "city_code", unique = true, nullable = false, length = 32)
  46.     public String getCityCode() {
  47.         return this.cityCode;
  48.     }
  49.     public void setCityCode(String cityCode) {
  50.         this.cityCode = cityCode;
  51.     }
  52.     @ManyToOne(fetch = FetchType.EAGER)
  53.     @JoinColumn(name = "province_code", nullable = false)
  54.     public AlcorTProvinces getAlcorTProvinces() {
  55.         return this.alcorTProvinces;
  56.     }
  57.     public void setAlcorTProvinces(AlcorTProvinces alcorTProvinces) {
  58.         this.alcorTProvinces = alcorTProvinces;
  59.     }
  60.     @Column(name = "city_name", nullable = false, length = 64)
  61.     public String getCityName() {
  62.         return this.cityName;
  63.     }
  64.     public void setCityName(String cityName) {
  65.         this.cityName = cityName;
  66.     }
  67.     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "alcorTCitys")
  68.     public Set<AlcotTDistrict> getAlcotTDistricts() {
  69.         return this.alcotTDistricts;
  70.     }
  71.     public void setAlcotTDistricts(Set<AlcotTDistrict> alcotTDistricts) {
  72.         this.alcotTDistricts = alcotTDistricts;
  73.     }
  74. }

  • 修改hibernate.cfg.xml中的定义方式,把原来的maping source=“xxxxx.hbm.xml”修改成
<mapping class="com.alcor.web.hibernate.AlcorTCitys" />

这样我们就可以把原来的 xxxxx.hbm.xml全部删除了。
经过这个步骤。如果你原有的servcice层的功能能够正常使用。恭喜你。迈出了成功的第一步。


版权声明:本文为博主原创文章,未经博主允许不得转载。

Hibernate 实体映射 @注解与xml 配置方式比较

实体和数据库之间存在某种映射关系,hibernate根据这种映射关系完成数据的存取。在程序中这种映射关系由映射文件(*.hbm.xml)或者java注解(@)定义。 本文以java注解的形式总结映射...
  • gladmustang
  • gladmustang
  • 2014年10月27日 13:44
  • 4369

hibernate中的映射文件xxx.hbm.xml详解总结

一.Hibernate映射文件的作用: Hibernate映射文件是Hibernate与数据库进行持久化的桥梁 二,Hibernate映射文件主要内容:     (1).映射内容的定...
  • tuke_tuke
  • tuke_tuke
  • 2015年11月08日 14:14
  • 19372

前几天用AnnotationSessionFactoryBean 注解方式代替*.hbm.xml时扫描映射实休文件后报错

吐操一下.Hibernate真心配置麻烦.不是VO. 是sessionFactory Hibernate版本 支持 hibernate-jpa-2.0-api-1.0.0.Final.jar hi...
  • u012140492
  • u012140492
  • 2016年04月04日 13:09
  • 731

hibernate中的映射文件xxx.hbm.xml详解总结

一.hibernate映射文件的作用: Hibernate映射文件是Hibernate与数据库进行持久化的桥梁 二,Hibernate映射文件主要内容:     (1).映射内容的定义:...
  • L1370647319
  • L1370647319
  • 2016年11月08日 10:04
  • 2944

Hibernate 两种配置,xml配置与注释配置 区别

Hibernate实现有两种配置,xml配置与注释配置 hibernate实现有两种配置,xml配置与注释配置。 (1):xml配置:hibernate.cfg.xml (放到src目录下...
  • tm1537728596
  • tm1537728596
  • 2016年07月09日 10:28
  • 1118

Java、Hibernate(JPA)常用注解整理

Java、Hibernate(JPA)常用注解整理
  • jianyuerensheng
  • jianyuerensheng
  • 2016年01月15日 14:32
  • 2400

Hibernate反向工程生成hbm.xml文件和带注解模型类

Hibernate通过将模型类的mapping地址放在cfg文件中,通过读取文件反射操作模型类。 操作模型类主要分为两种,一种是对应模型类生成.hbm.xml文件,将文件地址映射在cfg文件中。生成...
  • oliver233
  • oliver233
  • 2017年04月14日 18:44
  • 375

Hibernate使用注解映射取代映射文件

在编写hibernate的时候,需要将实体类映射到数据库中的表。通常需要一个配置文件(hibernate.cfg.xml),一个实体类(XX.Java),还有一个映射文件(XX.hbm.xml)。从J...
  • bestcxx
  • bestcxx
  • 2016年06月08日 16:43
  • 1442

Hibernate实体类注解配置与xml配置

Hibernate实现有两种配置,xml配置与注释配置 hibernate实现有两种配置,xml配置与注释配置。 (1):xml配置:hibernate.cfg.xml (放到src目录下...
  • QQQQQQ654
  • QQQQQQ654
  • 2016年08月09日 20:09
  • 7340

hibernate学习一对一,一对多,多对一,多对多,注解版和XML版

只是个人简单的一点小结 hibernate的配置文件 hibernate.cfg.xml         "-//Hibernate/Hibernate Configuration DTD 3.0...
  • I_do_can
  • I_do_can
  • 2015年12月22日 15:27
  • 1702
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(一):消除hibernate中<mapping resouce 的xxxx. hbm.xml文件
举报原因:
原因补充:

(最多只允许输入30个字)