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

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

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

    J2EE劍俠行

    直覺我的J2EE應(yīng)用生涯,打造我心中的一把利劍。

    常用鏈接

    統(tǒng)計(jì)

    技術(shù)鏈接

    最新評(píng)論

    hibernate的延遲加載通用方法

    呵呵,在忙一個(gè)項(xiàng)目,潛水很久,現(xiàn)在冒個(gè)泡:
    (本文適用在struts+spring+hibernate3上做開發(fā)的蟲蟲們)
    類名:HibernateUtil

    package?com.antbee.j2eemodel.util;

    import?java.lang.reflect.InvocationTargetException;
    import?java.lang.reflect.Method;
    import?java.util.Collection;
    import?java.util.Iterator;

    import?org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    public?class?HibernateUtil?extends?HibernateDaoSupport?{

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?object?POJO對(duì)象
    *?
    @param?methodName?方法名稱
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Object?object,?String?methodName)?throws?SecurityException,?NoSuchMethodException,?IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{

    String[]?methodArray?
    =?methodName.split("\\.");
    Method?method?
    =?null;
    Object?initializeObject?
    =?object;

    if(methodArray.length?==?1){
    this.getHibernateTemplate().lock(initializeObject,?org.hibernate.LockMode.NONE);
    method?
    =?object.getClass().getMethod(methodArray[0],?new?Class[]?{});
    initializeObject?
    =?method.invoke(initializeObject,?new?Object[]?{});
    this.getHibernateTemplate().initialize(initializeObject);
    }
    else{
    for(int?i=0;i<methodArray.length;i++){
    method?
    =?initializeObject.getClass().getMethod(methodArray[i],?new?Class[]?{});
    initializeObject?
    =?method.invoke(initializeObject,?new?Object[]?{});
    }
    this.getHibernateTemplate().lock(initializeObject,?org.hibernate.LockMode.NONE);
    this.getHibernateTemplate().initialize(initializeObject);
    }
    }

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?object?POJO對(duì)象
    *?
    @param?methodName?方法名稱數(shù)組
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Object?object,?String?methodName[])
    throws?SecurityException,?NoSuchMethodException,
    IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{

    for?(int?i?=?0;?i?<?methodName.length;?i++)?{
    String[]?methodArray?
    =?methodName[i].split("\\.");
    Method?method?
    =?null;
    Object?initializeObject?
    =?object;

    if(methodArray.length?==?1){
    this.getHibernateTemplate().lock(initializeObject,?org.hibernate.LockMode.NONE);
    method?
    =?object.getClass().getMethod(methodArray[0],?new?Class[]?{});
    initializeObject?
    =?method.invoke(initializeObject,?new?Object[]?{});
    this.getHibernateTemplate().initialize(initializeObject);
    }
    else{
    for(int?j=0;j<methodArray.length;j++){
    method?
    =?initializeObject.getClass().getMethod(methodArray[j],?new?Class[]?{});
    initializeObject?
    =?method.invoke(initializeObject,?new?Object[]?{});
    }
    this.getHibernateTemplate().lock(initializeObject,?org.hibernate.LockMode.NONE);
    this.getHibernateTemplate().initialize(initializeObject);
    }
    }

    }

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?object?POJO對(duì)象
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Object?object)?throws?SecurityException,?NoSuchMethodException,?IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{
    this.getHibernateTemplate().lock(object,?org.hibernate.LockMode.NONE);
    this.getHibernateTemplate().initialize(object);
    }

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?collection?POJO對(duì)象集合
    *?
    @param?methodName?方法名稱數(shù)組
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Collection?collection,?String?methodName[])
    throws?SecurityException,?NoSuchMethodException,
    IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{

    for(Iterator?i=collection.iterator();i.hasNext()Wink{
    Object?object?
    =?i.next();
    this.initialize(object,methodName);
    }
    }

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?collection?POJO對(duì)象集合
    *?
    @param?methodName?方法名稱
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Collection?collection,?String?methodName)
    throws?SecurityException,?NoSuchMethodException,
    IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{

    for(Iterator?i=collection.iterator();i.hasNext()Wink{
    Object?object?
    =?i.next();
    this.initialize(object,methodName);
    }
    }
    }?

    這個(gè)方法的好外是:可以不在hbm.xml的文件當(dāng)中,指定為lazy=true這個(gè)模式,可以直接使用。使用方法如下:
    如果你使用SPRING,則需要把hibernateUtil注入其中:
    ?<bean?id="hibernateUtilTarget"?class="com.antbee.j2eemodel.util.HibernateUtil">
    <property?name="sessionFactory">
    <ref?local="mssqlSessionFactory"?/>
    </property>
    </bean>

    <bean?id="hibernateUtil"?parent="BaseTransactionProxy"?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property?name="target">
    <ref?local="hibernateUtilTarget"?/>
    </property>
    </bean>
    <!--配置基礎(chǔ)事務(wù)-->
    <bean?id="BaseTransactionProxy"?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"?abstract="true">
    <property?name="transactionManager">
    <ref?bean="mssqltransactionManager"?/>
    </property>
    <property?name="proxyTargetClass">
    <value>true</value>
    </property>
    <property?name="transactionAttributes">
    <props>
    <prop?key="*">PROPAGATION_REQUIRED</prop>
    </props>
    </property>
    </bean>?

    使用示例:
    如果你使用STRUTS,則需要這樣:
    List?what_ur_view?=?XXXManager.find(.);//取得你要展示的對(duì)象
    //如果這個(gè)對(duì)象當(dāng)中有延遲加載的對(duì)象(SET)時(shí),則需要如下加載就行
    this.hibernateUtil.initialize(what_ur_view,?"getTbShipmentSale");
    //其中g(shù)etTbShipmentSale是其對(duì)象(SET也可以操作)?

    在頁面顯示的時(shí)候,你就可以使用JSTL如下表述:
    <c:out?value="${what_ur_view.tbShipmentSale.goodsReceivePersonPhone}"?/>//呵呵,是不是很爽呀。?

    同樣的方法,我們也可以對(duì)一個(gè)SET在頁面進(jìn)行顯示,方法如下:
    <c:forEach?items="${what_ur_view.tbShipmentProductMappingSet}"?var="ProductMapping"?varStatus="status">
    <c:out?value="${ProductMapping.productNum}"?/>
    <c:out?value="${ProductMapping.tbOutOfWarehouse.outOfWarehouseNum}"?/>
    </c:forEach>
    //呵呵,支持多級(jí)嵌套,?

    在ACTION當(dāng)中則需要加入
    hibernateUtil.initialize(what_ur_view.getTbShipmentProductMappingSet(),
    new?String[]?{?"getTbProduct",?"getTbOutOfWarehouse",
    "getTbProductConfigure"?});?
    呵,如果你要是在HIBERNATE當(dāng)中使用,這個(gè)就太簡單了吧。

    怎么樣?呵呵呵,
    從此,我對(duì)STRUTS的標(biāo)簽深惡痛絕,而對(duì)JSTL情有獨(dú)鐘了。

    posted on 2006-07-21 10:09 @家軍 閱讀(5607) 評(píng)論(2)  編輯  收藏 所屬分類: J2EE技術(shù)類

    評(píng)論

    # re: hibernate的延遲加載通用方法 2006-07-23 13:24 crazycy

    從此,我對(duì)STRUTS的標(biāo)簽深惡痛絕,而對(duì)JSTL情有獨(dú)鐘了。

    同樣的感覺...
    本質(zhì)都是一樣的;渴望一個(gè)標(biāo)準(zhǔn)來統(tǒng)一,JSTL出現(xiàn)并成熟了;也通用,幸事哦

      回復(fù)  更多評(píng)論   

    # re: hibernate的延遲加載通用方法[未登錄] 2008-06-14 10:40 AA

    我基本看不懂,小弟愚笨 哈哈  回復(fù)  更多評(píng)論   

    主站蜘蛛池模板: 国产又粗又猛又爽又黄的免费视频 | 13小箩利洗澡无码视频网站免费| 成人性生免费视频| 日木av无码专区亚洲av毛片| 青柠影视在线观看免费高清| 精品国产_亚洲人成在线高清| 成在线人直播免费视频| 亚洲高清国产拍精品青青草原| 国产区图片区小说区亚洲区| 国产裸模视频免费区无码| 激情小说亚洲色图| 凹凸精品视频分类国产品免费| 免费人成又黄又爽的视频在线电影 | 亚洲人成无码网站在线观看| 在线精品免费视频| 亚洲国产成人久久综合| 免费一级毛片在线观看| 国产vA免费精品高清在线观看| 亚洲中文字幕在线乱码| 男女午夜24式免费视频| 亚洲欧洲日产韩国在线| 91嫩草国产在线观看免费| 亚洲国产成人精品无码区花野真一| 午夜影视在线免费观看| 日本视频免费观看| 亚洲av无码成人黄网站在线观看| 4虎1515hh永久免费| 亚洲精品国产日韩| 亚洲阿v天堂在线2017免费| 丁香花在线观看免费观看图片| 日产亚洲一区二区三区| 好大好硬好爽免费视频| 精品一区二区三区免费视频| 亚洲成在人天堂在线| 性一交一乱一视频免费看 | a成人毛片免费观看| 亚洲国产成+人+综合| 免费99热在线观看| 久久免费视频观看| 亚洲欧洲av综合色无码| 亚洲女初尝黑人巨高清|