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

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

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

    軟件藝術(shù)思考者  
    混沌,彷徨,立志,蓄勢(shì)...
    公告
    日歷
    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    導(dǎo)航

    隨筆分類(86)

    隨筆檔案(85)

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

     

    Spring Framework最得以出名的是與Hibernate的無縫鏈接,基本上用Spring,就會(huì)用Hibernate。可惜的是Spring提供的HibernateTemplate功能顯得不夠,使用起來也不是很方便。我們編程序時(shí),一般先寫B(tài)usinessService,由BusinessService調(diào)DAO來執(zhí)行存儲(chǔ),在這方面Spring沒有很好的例子,造成真正想用好它,并不容易。

    我們的思路是先寫一個(gè)BaseDao,仿照HibernateTemplate,將基本功能全部實(shí)現(xiàn):

    public class BaseDao extends HibernateDaoSupport{

    ??? private Log log = LogFactory.getLog(getClass());

    ??? public Session openSession() {
    ??????? return SessionFactoryUtils.getSession(getSessionFactory(), false);
    ??? }

    ??? public Object get(Class entityClass, Serializable id) throws DataAccessException {
    ??????? Session session = openSession();
    ??????? try {
    ??????????? return session.get(entityClass, id);
    ??????? }
    ??????? catch (HibernateException ex) {
    ??????????? throw SessionFactoryUtils.convertHibernateAccessException(ex);
    ??????? }
    ??? }

    ??? public Serializable create(Object entity) throws DataAccessException {
    ??????? Session session = openSession();
    ??????? try {
    ??????????? return session.save(entity);
    ??????? }
    ??????? catch (HibernateException ex) {
    ??????????? throw SessionFactoryUtils.convertHibernateAccessException(ex);
    ??????? }
    ??? }

    ...

    其它的DAO,從BaseDao繼承出來,這樣寫其他的DAO,代碼就會(huì)很少。

    從BaseDao繼承出來EntityDao,專門負(fù)責(zé)一般實(shí)體的基本操作,會(huì)更方便。

    public interface EntityDao {

    ??? public Object get(Class entityClass, Serializable id) throws DataAccessException;

    ??? public Object load(Class entityClass, Serializable id) throws DataAccessException;

    ??? public Serializable create(Object entity) throws DataAccessException;
    ...}

    /**
    ?* Base class for Hibernate DAOs.? This class defines common CRUD methods for
    ?* child classes to inherit. User Sping AOP Inteceptor
    ?*/
    public class EntityDaoImpl extends BaseDao implements EntityDao{

    }

    為了Transaction的控制,采用AOP的方式:

    public interface EntityManager {

    ??? public Object get(Class entityClass, Serializable id);

    ??? public Object load(Class entityClass, Serializable id);

    ??? public Serializable create(Object entity);
    ...

    }

    /**
    ?* Base class for Entity Service. User Sping AOP Inteceptor
    ?*/
    public class EntityManagerImpl implements EntityManager {

    ??? private EntityDao entityDao;

    ??? public void setEntityDao(EntityDao entityDao) {
    ??????? this.entityDao = entityDao;
    ??? }

    ??? public Object get(Class entityClass, Serializable id) {
    ??????? return entityDao.get(entityClass, id);
    ??? }

    ??? public Object load(Class entityClass, Serializable id) {
    ??????? return entityDao.load(entityClass, id);
    ??? }
    ...

    }

    這樣我們就有了一個(gè)通用的Hibernate實(shí)體引擎,可以對(duì)任何Hibernate實(shí)體實(shí)現(xiàn)基本的增加、修改、刪除、查詢等。

    其它的BusinessService就可以繼承EntityManager,快速實(shí)現(xiàn)業(yè)務(wù)邏輯。

    具體XML配置如下:

    ?<!-- Oracle JNDI DataSource for J2EE environments -->
    ?<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    ??<property name="jndiName"><value>java:comp/env/jdbc/testPool</value></property>
    ?</bean>

    ?<!-- Hibernate SessionFactory for Oracle -->
    ?<!-- Choose the dialect that matches your "dataSource" definition -->
    ?<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
    ??<property name="dataSource"><ref local="dataSource"/></property>
    ??<property name="mappingResources">
    ???<value>user-hbm.xml</value>
    ??</property>
    ??<property name="hibernateProperties">
    ???<props>
    ????<prop key="hibernate.dialect">net.sf.hibernate.dialect.OracleDialect</prop>
    ????<prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.Provider</prop>
    ????<prop key="hibernate.cache.use_query_cache">true</prop>
    ????????????????? <prop key="hibernate.show_sql">false</prop>
    ???</props>
    ??</property>
    ?</bean>

    ?<!-- AOP DAO Intecepter -->
    ??????? <bean id="hibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">
    ????????? <property name="sessionFactory">
    ??????????? <ref bean="sessionFactory"/>
    ????????? </property>
    ??????? </bean>

    ??????? <bean id="entityDaoTarget" class="com.gpower.services.entity.dao.EntityDaoImpl">
    ????????? <property name="sessionFactory">
    ??????????? <ref bean="sessionFactory"/>
    ????????? </property>
    ??????? </bean>

    ??????? <bean id="entityDao" class="org.springframework.aop.framework.ProxyFactoryBean">
    ????????? <property name="proxyInterfaces">
    ??????????? <value>com.gpower.services.entity.dao.EntityDao</value>
    ????????? </property>
    ????????? <property name="interceptorNames">
    ??????????? <list>
    ????????????? <value>hibernateInterceptor</value>
    ????????????? <value>entityDaoTarget</value>
    ??????????? </list>
    ????????? </property>
    ??????? </bean>

    ?<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
    ?<bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
    ??<property name="sessionFactory"><ref local="sessionFactory"/></property>
    ?</bean>

    ?<!-- Transaction manager that delegates to JTA (for a transactional JNDI DataSource) -->
    ?<!--
    ?<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
    ?-->

    ?<!-- Transactional proxy for the Application primary business object -->
    ??????? <bean id="entityManagerTarget" class="com.gpower.services.entity.EntityManagerImpl">
    ????????? <property name="entityDao">
    ??????????? <ref bean="entityDao"/>
    ????????? </property>
    ??????? </bean>

    ??????? <bean id="entityManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    ????????? <property name="transactionManager">
    ??????????? <ref bean="transactionManager"/>
    ????????? </property>
    ????????? <property name="target">
    ??????????? <ref bean="entityManagerTarget"/>
    ????????? </property>
    ????????? <property name="transactionAttributes">
    ???? <props>
    ?????? <prop key="get*">PROPAGATION_SUPPORTS</prop>
    ?????? <prop key="*">PROPAGATION_REQUIRED</prop>
    ???? </props>
    ????????? </property>
    ??????? </bean>


    Spring Framework之最佳實(shí)踐二
    posted on 2006-07-05 16:38 智者無疆 閱讀(1654) 評(píng)論(2)  編輯  收藏 所屬分類: about spring
    評(píng)論:
    • # re: Spring Framework之最佳實(shí)踐二   白白 Posted @ 2006-07-05 16:54
      我發(fā)現(xiàn)javascript源碼大全挺好,里面的代碼都是正確的,我試了幾個(gè)都可以,呵呵,老公,你真聰明啊!  回復(fù)  更多評(píng)論   

    • # re: Spring Framework之最佳實(shí)踐二   白白 Posted @ 2006-07-10 15:12
      我時(shí)刻關(guān)注著你的博客,點(diǎn)擊率還蠻高的嘛。比我們公司的網(wǎng)站還要厲害!!!呵呵,我喜歡啦。  回復(fù)  更多評(píng)論   

     
    Copyright © 智者無疆 Powered by: 博客園 模板提供:滬江博客


       觀音菩薩贊

    主站蜘蛛池模板: 一级做受视频免费是看美女| 国色精品va在线观看免费视频| 亚洲国产成人精品女人久久久 | 亚洲AV一宅男色影视| 青青草无码免费一二三区| 亚洲色偷偷色噜噜狠狠99网| 国产成人精品亚洲精品| 50岁老女人的毛片免费观看| 香蕉视频亚洲一级| 亚洲爱情岛论坛永久| 亚洲成_人网站图片| 中文字幕影片免费在线观看 | 曰批全过程免费视频观看免费软件 | 国产免费区在线观看十分钟| 亚洲第一页综合图片自拍| 无码人妻久久一区二区三区免费| 亚洲精品av无码喷奶水糖心| 91嫩草免费国产永久入口| 免费无码一区二区| 亚洲一级大黄大色毛片| 亚洲热妇无码AV在线播放| 永久免费bbbbbb视频| 亚洲GV天堂GV无码男同| 亚洲av综合av一区| 五月婷婷亚洲综合| 手机在线看永久av片免费| 久热免费在线视频| 亚洲日韩乱码久久久久久| 亚洲中文字幕无码一区二区三区| 最近最新的免费中文字幕| 免费无遮挡无码永久视频| 中文成人久久久久影院免费观看| 亚洲av无码兔费综合| 亚洲人色大成年网站在线观看| 无码一区二区三区AV免费| 最好免费观看高清在线 | a级毛片免费观看视频| 亚洲av成本人无码网站| 色偷偷女男人的天堂亚洲网| 国产成人精品日本亚洲| 91免费国产精品|