使用註釋消除hibernate中配置文件 - Spring 2.5 JPA hibernate 使用方法的點滴整理(一)使用註釋消除hibernate中配置文件...

以下幾篇文章簡單的介紹一下jpa 和 spring2.5 hibernate3.2 整合配置的一個過程。純粹個人經驗只談。如果有錯誤,請各位留言指出。


本系列重點是涉及 配置過程 ,對註釋的用法不多介紹。


註釋語法越來越多的被業界所使用,並且註釋配置相對於 XML 配置具有很多的優勢:它可以充分利用 Java 的反射機制獲取類結構信息,這些信息可以有效減少配置的工作。註釋和 Java 代碼位於一個文件中,而 XML 配置採用獨立的配置文件,大多數配置信息在程序開發完成後都不會調整,如果配置信息和 Java 代碼放在一起,有助於增強程序的內聚性。而採用獨立的 XML 配置文件,程序員在編寫一個功能時,往往需要在程序文件和配置文件中不停切換,這種思維上的不連貫會降低開發效率。因此在很多情況下,註釋配置比 XML 配置更受歡迎,註釋配置有進一步流行的趨勢。Spring 2.5 的一大增強就是引入了很多註釋類,現在您已經可以使用註釋配置完成大部分 XML 配置的功能。


首先,我們已經通過 傳統的spring +hibernate方式構架成功了一個應用的後臺體系。
這個體系裏面 有這樣幾個重要的配置文件。
hibernate.cfg.xml 。
裏面通過 配置 mapping來指向每張數據表單生成配置文件.xxxx.hbm.xml文件
applicaitonContex.xml。
裏面通過定義一個一個bean 來配置 各個需要用到的 DAO 和 Service。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans >
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>

<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事務攔截器bean需要依賴注入一個事務管理器 -->
<property name="transactionManager">
<ref local="transactionManager"/>
</property>
<property name="transactionAttributes">
<!-- 下面定義事務傳播屬性-->
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="change*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>


<!-- 定義自動代理BeanNameAutoProxyCreator -->
<bean id="beanNameAutoProxyCreator"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定對滿足哪些bean name的bean自動生成業務代理 -->
<property name="beanNames">
<list>
<value>*Service</value>
</list>
</property>
<!-- 下面定義BeanNameAutoProxyCreator所需的事務攔截器-->
<property name="interceptorNames">
<list>
<!-- 此處可增加其他新的Interceptor -->
<value>transactionInterceptor</value>
</list>
</property>
</bean>

<bean id="McCityInfoDAO"
class="com.firemax.manatee.hibernate.McCityInfoDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="McMaterialInfoDAO"
class="com.firemax.manatee.hibernate.McMaterialInfoDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
</beans>

hibernate.cfg.xml要配置這麼多 xxxxx.hbm.xml文件。每次數據結構發生變化的時候。要重新去改寫pojo和dao以及這些xxxxx.hbm.xml
那麼好。我們現在就用 註解的力量 去把這部分工作簡化。
首先我們需要

hibernate3.2 以上版本的jar

jdk 5 以上的環境
spring2
然後我們修改pojo的java類。加上註解。使起通過註解來取代原先要xxxx.hbm.xml裏面配置的指向的數據庫表單結構的信息



import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
* AlcorTCitys entity. @author MyEclipse Persistence Tools
*/
@Entity
@Table(name = "alcor_t_citys", catalog = "alcorweb")
public class AlcorTCitys implements java.io.Serializable {

// Fields

private String cityCode;
private AlcorTProvinces alcorTProvinces;
private String cityName;
private Set<AlcotTDistrict> alcotTDistricts = new HashSet<AlcotTDistrict>(0);

// Constructors

/** default constructor */
public AlcorTCitys() {
}

/** minimal constructor */
public AlcorTCitys(String cityCode, AlcorTProvinces alcorTProvinces,
String cityName) {
this.cityCode = cityCode;
this.alcorTProvinces = alcorTProvinces;
this.cityName = cityName;
}

/** full constructor */
public AlcorTCitys(String cityCode, AlcorTProvinces alcorTProvinces,
String cityName, Set<AlcotTDistrict> alcotTDistricts) {
this.cityCode = cityCode;
this.alcorTProvinces = alcorTProvinces;
this.cityName = cityName;
this.alcotTDistricts = alcotTDistricts;
}

// Property accessors
@Id
@Column(name = "city_code", unique = true, nullable = false, length = 32)
public String getCityCode() {
return this.cityCode;
}

public void setCityCode(String cityCode) {
this.cityCode = cityCode;
}

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "province_code", nullable = false)
public AlcorTProvinces getAlcorTProvinces() {
return this.alcorTProvinces;
}

public void setAlcorTProvinces(AlcorTProvinces alcorTProvinces) {
this.alcorTProvinces = alcorTProvinces;
}

@Column(name = "city_name", nullable = false, length = 64)
public String getCityName() {
return this.cityName;
}

public void setCityName(String cityName) {
this.cityName = cityName;
}

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "alcorTCitys")
public Set<AlcotTDistrict> getAlcotTDistricts() {
return this.alcotTDistricts;
}

public void setAlcotTDistricts(Set<AlcotTDistrict> alcotTDistricts) {
this.alcotTDistricts = alcotTDistricts;
}

}


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


這樣我們就可以把原來的 xxxxx.hbm.xml全部刪除了。
經過這個步驟。如果你原有的servcice層的功能能夠正常使用。恭喜你。邁出了成功的第一步。


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/remote_roamer
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章