Java Votary

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            48 隨筆 :: 1 文章 :: 80 評(píng)論 :: 0 Trackbacks
          我是比較討厭xml的人,沒有強(qiáng)類型,很多配置出錯(cuò),包括xdoclet都無法檢查。剛好現(xiàn)在的主流框架總算開始支持annotation了,所以玩了一下配置,供參考:
          hibernate3.05
          hibernate-annotations-3.0beta2
          spring1.21

          幾個(gè)配置文件如下:
          spring-database.xml(這個(gè)文件基本不變,有新的dao在底下加入一行即可。
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

          <beans>

              
          <!-- ========================= RESOURCE DEFINITIONS ========================= -->

              
          <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
                  
          <property name="driverClassName"><value>${jdbc.driverClassName}</value></property>
                  
          <property name="url"><value>${jdbc.url}</value></property>
                  
          <property name="username"><value>${jdbc.username}</value></property>
                  
          <property name="password"><value>${jdbc.password}</value></property>
              
          </bean>

              
          <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                  
          <property name="configurationClass"><value>org.hibernate.cfg.AnnotationConfiguration</value></property>
                     
          <property name="dataSource"><ref bean="dataSource"/></property>
                     
          <property name="configLocation"><value>/hibernate.cfg.xml</value></property>
             
          </bean>

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

              
          <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>

              
          <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
                  
          <property name="transactionInterceptor"><ref bean="transactionInterceptor"/></property>
              
          </bean>

              
          <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
                  
          <property name="transactionManager"><ref bean="transactionManager"/></property>
                  
          <property name="transactionAttributeSource">
                      
          <bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
                  
          </property>
              
          </bean>

              
          <!-- ========================= DAO DEFINITIONS ========================= -->

              
          <bean id="testDao" class="org.steeven.TestDaoImpl">
                   
          <property name="sessionFactory">
                      
          <ref bean="sessionFactory"/>
                  
          </property>
              
          </bean>

              <!-- ========================= DAO DEFINITIONS ========================= -->
               <bean id="mitService" class="org.steeven.TestServiceImpl"></bean>
          </beans>

          hibernate.cfg.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE hibernate-configuration PUBLIC
                  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
          >
          <hibernate-configuration>
              
          <session-factory>
                  
          <property name="hibernate.hbm2ddl.auto">create-drop</property>
                  
          <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
                  
          <property name="hibernate.cglib.use_reflection_optimizer">true</property>
                  
          <property name="default-lazy">false</property>
                  
                  
          <!-- 用于hibernate持久化的對(duì)象" -->
                  
          <mapping class="org.steeven.Test"/>
                  
                    
          <listener type="pre-update" class="org.hibernate.validator.event.ValidatePreUpdateEventListener"/>
                    
          <listener type="pre-insert" class="org.hibernate.validator.event.ValidatePreInsertEventListener"/>
              
          </session-factory>
          </hibernate-configuration>

          上面兩個(gè)就是配置文件的全部了。下面看看代碼:
          TestDao.java(注意,就是個(gè)普通的dao,事務(wù)控制由調(diào)用者標(biāo)注)
          public class TestDaoImpl extends HibernateDaoSupport implements TestDao {
              
          public void save(Test data) {
                  getHibernateTemplate().saveOrUpdateAll(Arrays.asList(data));
              }

          }
          Test.java
          @Entity
          @Proxy(lazy 
          = false)
          public class Test {
              
          int id;
              String name;
              Map
          <String, String> properties;
              @Column(length 
          = 100)
              
          public String getName() {
                  
          return name;
              }

              
          public void setName(String name) {
                  
          this.name = name;
              }


              @Id(generate 
          = GeneratorType.AUTO)
              
          public int getId() {
                  
          return id;
              }


              
          public void setId(int id) {
                  
          this.id = id;
              }


              @Transient
              
          public String getNotStoredProp() {
                  
          return null;
              }



              @Type(type 
          = "org.steeven.database.MapUserType")
              @Column(name 
          = "properties", length = 1000)
                  //Map暫時(shí)不被支持,自己持久化到一個(gè)大字段
              
          public Map<String, String> getProperties() {
                  
          return properties;
              }


              
          public void setProperties(Map<String, String> properties) {
                  
          this.properties = properties;
              }

          }

          TestServiceImpl.java(這個(gè)類也是從spring中取得,關(guān)鍵就在@Transactional標(biāo)記)
          @Transactional
          public class TestServiceImpl implements TestService {
              
          public void save(Test data) {
                  TestDao dao 
          = (TestDao)ServiceLocator.getInstance().getBean("testDao");
                  dao.save(data[
          0]);
                  
          if (truethrow new RuntimeException(); //看看數(shù)據(jù)庫是不是什么都沒有?!
                  dao.save(data[1]);
              }

          }

          現(xiàn)在很清爽了,所有的事務(wù)控制只需要加幾個(gè)@Transaction標(biāo)記。感謝hibernate+spring
          另外,hibernate還提供了基于標(biāo)記的參數(shù)校驗(yàn),請(qǐng)參考下面文檔:

          參考資源:
          spring1.21自帶smaples/jpetstore
          http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/
          posted on 2005-12-13 23:32 Dion 閱讀(2266) 評(píng)論(2)  編輯  收藏 所屬分類: Springframework

          評(píng)論

          # re: 【轉(zhuǎn)載】hibernate3.0+ejb3 annotaion配置實(shí)戰(zhàn)+spring1.21 annotation事務(wù)控制 2005-12-16 18:17 jess
          safd  回復(fù)  更多評(píng)論
            

          # re: 【轉(zhuǎn)載】hibernate3.0+ejb3 annotaion配置實(shí)戰(zhàn)+spring1.21 annotation事務(wù)控制 2006-08-14 13:20 westzq
          我照著你的寫了個(gè)為什么不能實(shí)現(xiàn)事務(wù)?

          hibernate.cfg.xml中的
          <listener type="pre-update" class="org.hibernate.validator.event.ValidatePreUpdateEventListener"/>
          <listener type="pre-insert" class="org.hibernate.validator.event.ValidatePreInsertEventListener"/>
          需要什么特殊配置嗎?  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 奎屯市| 武鸣县| 江油市| 宝鸡市| 泉州市| 屯留县| 新龙县| 太和县| 益阳市| 锡林浩特市| 恩施市| 保山市| 郎溪县| 丹寨县| 本溪市| 晋州市| 武川县| 嘉祥县| 富锦市| 镇江市| 马边| 金昌市| 白水县| 南乐县| 隆化县| 勐海县| 霍邱县| 叶城县| 通江县| 嵊州市| 汽车| 郎溪县| 阿图什市| 余江县| 荔波县| 宁强县| 宁海县| 松阳县| 永州市| 巴东县| 屏山县|