对于特定的数据访问对象或业务对象的方法来说,基本的模板编程模型看起来象下面所示的代码那样。对于这些外部对象来说,没有任何实现特定接口的要求,仅仅要求提供以个Hibernate SessionFactory. 它可以从任何地方得到,不过比较适宜的方法是从Spring的applicationcontext中得到的bean引用:通过简单的setSessionFactory(..)这个bean的setter方法。
<beans></beans>
[beans]
...
[bean id="myProductDao" class="product.ProductDaoImpl"]
[property name="sessionFactory" ref="mySessionFactory"/]
[/bean]
[/beans]
<bean class="product.ProductDaoImpl" id="myProductDao"></bean>
<property name="sessionFactory" ref="mySessionFactory"> </property>
public class ProductDaoImpl implements ProductDao{
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory){
this.sessionFactory = sessionFactory;
}
public Collection loadProductsByCategory(final String category) throws DataAccessException {
HibernateTemplate ht = new HibernateTemplate(this.sessionFactory);
return (Collection) ht.execute(
new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Query query = session.createQuery("from test.Product product where product.category=?");
query.setString(0, category);
return query.list();
}
}
);
}
}
一个回调实现能够有效地在任何Hibernate数据访问中使用。HibernateTemplate 会确保当前Hibernate的 Session 对象的正确打开和关闭,并直接参与到事务管理中去。 Template实例不仅是线程安全的,同时它也是可重用的。因而他们可以作为外部对象的实例变量而被持有。对于那些简单的诸如find、load、saveOrUpdate或者delete操作的调用,HibernateTemplate 提供可选择的快捷函数来替换这种回调的实现。 不仅如此,Spring还提供了一个简便的 HibernateDaoSupport 基类,这个类提供了 setSessionFactory(..) 方法来接受一个 SessionFactory 对象,同时提供了 getSessionFactory() 和 getHibernateTemplate() 方法给子类使用。 综合了这些,对于那些典型的业务需求,就有了一个非常简单的DAO实现:
public class ProductDaoImpl extends HibernateDaoSupport implements ProductDao {
public Collection loadProductsByCategory(String category) throws DataAccessException {
return getHibernateTemplate().find(
"from test.Product product where product.category=?", category);
}
}
分享到:
相关推荐
5.2 Hibernate回调与拦截机制 5.3 Hibernate实用技术 第6章 Hibernate 实战——创建RedSaga论坛 6.1 目标 6.2 E-R建模还是对象建模 6.3 E-R建模及工具集 6.4 对象建模 6.5 项目的目录组织和基础设施 6.6 测试...
5.2 Hibernate回调与拦截机制 5.3 Hibernate实用技术 第6章 Hibernate 实战——创建RedSaga论坛 6.1 目标 6.2 E-R建模还是对象建模 6.3 E-R建模及工具集 6.4 对象建模 6.5 项目的目录组织和基础设施 6.6 测试...
- **回调验证**:在回调URL对应的Java方法中,你需要验证回调信息的合法性,包括签名、交易状态等,防止被恶意篡改。 - **更新订单状态**:如果验证成功,表示交易完成,此时可以在自己的系统中更新订单状态,例如...
5. 支付模块:与第三方支付平台对接,处理支付请求,通常会涉及异步处理和回调通知。 6. 客服与评价模块:用户可以进行咨询、评价商品,这部分可能需要用到邮件服务、消息队列等技术。 **开发过程** 1. 设计数据库...
- **事件监听器**:允许开发者在特定事件发生时触发回调方法。 - **国际化**:支持多语言环境,便于全球化部署。 通过深入理解这些特性和使用方法,开发人员可以充分利用Hibernate的强大功能,构建出高性能、可扩展...
4. **回调机制**:HibernateTemplate提供了doInHibernate()和doInTransaction()等方法,允许用户自定义回调函数,进行更复杂的数据库操作。 **JdbcDaoSupport和HibernateDaoSupport** 这两个类是Spring提供的一般...
这里的`ResultSetHandler`是一个回调接口,用于处理查询结果。 3. 在实际使用时,根据业务需求,我们可以创建更多的DAO实现类,它们都继承自`JDBCTemplate`,并通过反射调用父类中的方法,以完成特定的数据库操作。...
4. spring-jdbc:Spring的JDBC抽象层,简化了数据库操作,提供了模板方法和回调机制,避免了繁琐的JDBC代码。 5. spring-core:Spring的核心模块,提供了IoC容器和基本的工具类,是其他所有模块的基础。 接下来是...
// 回调 callback.doInHibernate(s); s.getTransaction().commit(); } catch (Exception e) { s.getTransaction().rollback(); } finally { s.close(); s = null; } } private Session getSession() { ...
##### 2.4 可选的回调机制 EJB3.0允许开发者仅实现他们真正需要的回调方法。例如,使用`@PostConstruct`和`@PreDestroy`等注解来定义Bean初始化和销毁时的行为。这种灵活性使得开发者可以根据具体需求选择是否实现...
这些内容对于处理数据库操作至关重要,Spring通过提供模板和回调机制简化了数据访问代码。 在"AOP和面向切面编程"章节中,读者可以了解Spring如何实现面向切面编程,包括定义切面、通知类型(前置、后置、环绕等)...
2. **spring-jdbc-4.0.2.RELEASE.jar**:Spring的JDBC抽象层,它简化了数据库访问,通过模板方法和回调机制减少了重复的JDBC代码。 3. **spring-core-4.0.2.RELEASE.jar**:Spring的核心模块,包含了IoC(控制反转...
在微信环境中,这通常需要集成微信开放平台API,实现用户授权、订单同步、支付回调等功能。此外,系统还需要设计合理的分销等级和佣金计算规则,激励用户参与分销。 这个项目中提供的源码可能涵盖了以上所有技术的...
- 提供了丰富的查询方法,如`query`、`update`等,以及多种回调函数,如`PreparedStatementCreator`、`PreparedStatementSetter`、`ResultSetExtractor`、`RowMapper`等,方便不同场景下的使用。 - **使用方式**...
2.5.4版本对JDBC、Hibernate、JPA等数据访问技术进行了集成优化,提供了模板类和回调机制,降低了与数据库交互的复杂性。 7. **Spring Web Services** Spring Web Services模块在2.5.4版本中也得到了强化,支持...
例如,使用`$.ajax()`方法,设置URL为后台处理的Action,通过`success`回调处理返回的数据。 综上所述,SSH框架结合jQuery的AJAX,能够实现高效、用户体验良好的Web应用开发。通过熟练掌握这些技术,开发者可以快速...
3. **支付回调处理**:支付成功后,第三方支付平台会通过异步通知接口回调到商户服务器。这部分源码会包含处理回调信息的逻辑,确保交易的正确性,并更新订单状态。 4. **支付安全**:涉及到敏感信息的加密解密,如...
1. 拦截器基于Java反射,过滤器基于函数回调。 2. 过滤器依赖Servlet容器,拦截器独立。 3. 拦截器作用于Action请求,过滤器作用范围更广。 4. 拦截器可以访问Action上下文和值栈,过滤器则不能。 **使用Struts2...