无思

本BLOG只用于个人资料收藏,内容如非注明,均为转贴资料,无意侵犯版权,特此声明!

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::
1、Resource Definitions in an Application Context, like datasource, sessionFactory.
2、Use HibernateTemplate and callback implementation to implement a DAO class.
public class ProductDaoImpl implements ProductDao { private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public List loadProductsByCategory(final String category) { HibernateTemplate hibernateTemplate = new HibernateTemplate(this.sessionFactory); return (List) hibernateTemplate.execute( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { List result = session.find("from test.Product product where product.category=?", category, Hibernate.STRING); // do some further stuff with the result list return result; } }); } }


3、Use HibernateDaoSupport implement DAO class
public class ProductDaoImpl extends HibernateDaoSupport implements ProductDao {

  public List loadProductsByCategory(String category) {
    return getHibernateTemplate().find("from test.Product product where product.category=?", category);
  }
}
4. Applying an AOP Interceptor Instead of a Template
...

<bean id="myHibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">
  <property name="sessionFactory">
    <ref bean="mySessionFactory"/>
  </property>
</bean>

<bean id="myProductDaoTarget" class="product.ProductDaoImpl">
  <property name="sessionFactory">
    <ref bean="mySessionFactory"/>
  </property>
</bean>

<bean id="myProductDao" class="org.springframework.aop.framework.ProxyFactoryBean">
  <property name="proxyInterfaces">
    <value>product.ProductDao</value>
  </property>
  <property name="interceptorNames">
    <list>
      <value>myHibernateInterceptor</value>
      <value>myProductDaoTarget</value>
    </list>
  </property>
</bean>

...
public class ProductDaoImpl extends HibernateDaoSupport implements ProductDao {

  public List loadProductsByCategory(final String category) throws MyException {
    Session session = SessionFactoryUtils.getSession(getSessionFactory(), false);
    try {
      List result = session.find("from test.Product product where product.category=?",
category, Hibernate.STRING);
      if (result == null) {
        throw new MyException("invalid search result");
      }
      return result;
    }
    catch (HibernateException ex) {
      throw SessionFactoryUtils.convertHibernateAccessException(ex);
    }
  }
}

5. Programmatic Transaction Demarcation

...

<bean id="myTransactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
  <property name="sessionFactory">
    <ref bean="mySessionFactory"/>
  </property>
</bean>

<bean id="myProductService" class="product.ProductServiceImpl">
  <property name="transactionManager">
    <ref bean="myTransactionManager"/>
  </property>
  <property name="productDao">
    <ref bean="myProductDao"/>
  </property>
</bean>
public class ProductServiceImpl implements ProductService {

  private PlatformTransactionManager transactionManager;
  private ProductDao productDao;

  public void setTransactionManager(PlatformTransactionManager transactionManager) {
    this.transactionManager = transactionManager;
  }

  public void setProductDao(ProductDao productDao) {
    this.productDao = productDao;
  }

  public void increasePriceOfAllProductsInCategory(final String category) {
    TransactionTemplate transactionTemplate = new TransactionTemplate(this.transactionManager);
    transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
    transactionTemplate.execute(new TransactionCallbackWithoutResult() {
      public void doInTransactionWithoutResult(TransactionStatus status) {
        List productsToChange = productDAO.loadProductsByCategory(category);
        ...
      }
    });
  }
}
posted on 2004-10-08 11:03  kavenmo  阅读(462)  评论(0)    收藏  举报