<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java Votary

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      48 隨筆 :: 1 文章 :: 80 評(píng)論 :: 0 Trackbacks
    我是比較討厭xml的人,沒(méi)有強(qiáng)類(lèi)型,很多配置出錯(cuò),包括xdoclet都無(wú)法檢查。剛好現(xiàn)在的主流框架總算開(kāi)始支持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è)類(lèi)也是從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ù)庫(kù)是不是什么都沒(méi)有?!
            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 閱讀(2260) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): 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
    我照著你的寫(xiě)了個(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)論
      

    主站蜘蛛池模板: 无码人妻丰满熟妇区免费| 国产精品亚洲片夜色在线| 亚洲人成网亚洲欧洲无码久久| 亚洲啪啪免费视频| 亚洲美女aⅴ久久久91| 久久久久久久亚洲Av无码| 亚洲一区二区在线免费观看| 亚洲a在线视频视频| 伊人久久综在合线亚洲2019| 中文字幕亚洲色图| 亚洲精品美女在线观看| 亚洲人色大成年网站在线观看| 亚洲免费视频观看| 亚洲色大成网站www久久九| 久久亚洲中文无码咪咪爱| 理论亚洲区美一区二区三区| 国产午夜亚洲精品不卡电影| 日本精品久久久久久久久免费| 又硬又粗又长又爽免费看 | 成人片黄网站色大片免费观看cn | 亚洲欧洲专线一区| 亚洲AV性色在线观看| 国产成人综合亚洲| 一级一级一片免费高清| 亚洲丶国产丶欧美一区二区三区| 色偷偷亚洲男人天堂| 一级特黄a免费大片| 免费精品一区二区三区第35| 男人扒开添女人下部免费视频| 亚洲一区二区三区免费| 久久免费观看国产99精品| 国产成人福利免费视频| 日韩电影免费在线观看视频| 久草免费在线观看视频| 永久免费观看的毛片的网站| 亚洲男人天堂2020| 久久丫精品国产亚洲av| 亚洲中文字幕无码av| xvideos永久免费入口| 24小时日本电影免费看| 国产无遮挡吃胸膜奶免费看|