HibernateTemplate:
在我们dao层使用hibernate时,一种把dao层extends HibernateDaoSupport,
再得到HibernateTemplate,无论调用HiberanteTemplate关于crud数据库时都会调用execute(HibernateCallback(),boolean exposeNativeSession)方法,
我们一般只关心业务,所以只要实现hiberanteCallback方法,在里面实现业务就行了.execute的作用,使用我们不要控制事务,打开session,session.flush,session.close,这些都自动完成.
execute源代码:
public Object execute(HibernateCallback action, boolean exposeNativeSession) throws DataAccessException {
Assert.notNull(action, "Callback object must not be null");
Session session = getSession();//得到session
boolean existingTransaction = SessionFactoryUtils.isSessionTransactional(session, getSessionFactory());
if (existingTransaction) {
logger.debug("Found thread-bound Session for HibernateTemplate");
}
FlushMode previousFlushMode = null;
try {
previousFlushMode = applyFlushMode(session, existingTransaction);
enableFilters(session);
Session sessionToExpose = (exposeNativeSession ? session : createSessionProxy(session));
Object result = action.doInHibernate//调用我们写的业务方法(sessionToExpose);
flushIfNecessary(session, existingTransaction);//session.flush()保存数据到数据库去
return result;
}
catch (HibernateException ex) {
throw convertHibernateAccessException(ex);
}
catch (SQLException ex) {
throw convertJdbcAccessException(ex);
}
catch (RuntimeException ex) {
// Callback code threw application exception...
throw ex;
}
finally {
if (existingTransaction) {
logger.debug("Not closing pre-bound Hibernate Session after HibernateTemplate");
disableFilters(session);
if (previousFlushMode != null) {
session.setFlushMode(previousFlushMode);
}
}
else {
// Never use deferred close for an explicitly new Session.
if (isAlwaysUseNewSession()) {
SessionFactoryUtils.closeSession(session);//session.close();
}
else {
SessionFactoryUtils.closeSessionOrRegisterDeferredClose(session, getSessionFactory());
}
}
}
}
这里最重要的是看flushIfNecessary(session, existingTransaction);这个方法在HiberanteTemplate的父类HiberanteAccessor中:
protected void flushIfNecessary(Session session, boolean existingTransaction) throws HibernateException {
if (getFlushMode() == FLUSH_EAGER || (!existingTransaction && getFlushMode() != FLUSH_NEVER)) {
logger.debug("Eagerly flushing Hibernate session");
session.flush();
}
}
如果我们dao层一个方法中调用,hiberanteTemplate.save(1),hibernateTemplate.save(2).那么,就和jdbcTemplate.update(1),jdbcTemplate(2),一样了,如果同时保存成功或失败.我们也样设置事务.其实原理上面的jdbcTemplate一样.
分享到:
相关推荐
Spring提供了多种持久化模板,如JdbcTemplate和HibernateTemplate,以简化数据库操作并减少代码中的样板代码。这两个模板都是Spring JDBC模块的一部分,用于增强对SQL数据库的访问能力。本文将深入探讨Spring对...
5、 Spring提供的众多辅助类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate 6、 Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts2等,更便于应用的开发。
本文主要讲解如何在Spring4.0.4下整合Hibernate4.3.6; 主要介绍了如下内容: 项目结构的规划; Spring MVC的配置和使用; Spring下整合Hibernate的具体过程;...jdbcTemplate和HibernateTemplate两种方式操作数据库;
5. 使用Spring的JdbcTemplate或HibernateTemplate执行数据库查询和更新操作。 6. 测试和调试整合后的应用,确保各个组件正常工作。 通过这个实战项目,你将掌握Java EE开发中的核心技术,并能构建出符合企业级标准...
4. CRUD操作的示例:展示了如何通过Spring的JdbcTemplate或HibernateTemplate来执行创建、查询、更新和删除数据库记录的代码示例。 5. 整合SSH:描述了如何将这三个框架集成在一起,实现一个完整的Web应用程序。 ...
3. **创建JdbcTemplate对象**:在Spring配置文件中定义数据源和JdbcTemplate bean。数据源负责连接数据库,而JdbcTemplate则用于执行SQL语句。 ```xml <!-- 在Spring配置文件中定义数据源 --> <!--...
8. **JdbcTemplate与HibernateTemplate和事务管理** - **JdbcTemplate**:提供SQL操作的抽象,简化JDBC的使用。 - **HibernateTemplate**:是Spring对Hibernate的封装,简化ORM操作。 - **事务管理**:Spring支持...
此外,Spring还提供了数据访问抽象,如JdbcTemplate和HibernateTemplate,用于简化数据库操作。 3. Hibernate3:Hibernate是一个对象关系映射(Object-Relational Mapping,ORM)框架,它消除了Java应用与数据库...
例如,它们可能包括了保存(insert)、更新(update)、删除(delete)和查询(select)数据的方法,这些方法可能是基于JdbcTemplate或者HibernateTemplate实现的。 JdbcTemplate是Spring提供的一个数据库访问组件...
Spring还集成了数据库操作,如JdbcTemplate和HibernateTemplate,与Hibernate进行无缝配合。 Hibernate是持久化层的框架,它简化了Java对象与数据库之间的映射(ORM)工作。Hibernate通过XML或注解的方式定义对象...
Spring 可以通过工厂方法或 JdbcTemplate、HibernateTemplate 提供的模板方法来获取 Session。 6. **Service 层设计**:Service 层是业务逻辑的核心,通常会注入 DAO 实例并调用其方法来完成业务处理。Service 层...
例如,Spring的JdbcTemplate和HibernateTemplate提供了模板方法,用于简化数据库操作,减少了大量重复的代码。 **集成支持** Spring 能够很好地与许多流行框架集成,如Struts、Hibernate、JSF等。这使得开发者可以...
此外,Spring还提供了数据库访问的支持,如JdbcTemplate和HibernateTemplate,可以方便地与Hibernate集成。 Hibernate是一个对象关系映射(ORM)框架,它解决了在Java应用中操作数据库的繁琐工作。Hibernate通过...
Spring还提供了数据访问抽象,如JdbcTemplate和HibernateTemplate,可以与MyBatis一起使用,简化数据库操作。 MyBatis是一个轻量级的持久层框架,它解决了Java对象和SQL语句之间的映射问题。MyBatis通过XML或注解的...
Spring还提供了与各种数据库交互的JdbcTemplate和HibernateTemplate,以及对其他框架如Struts2的无缝集成。 Hibernate是一个对象关系映射(ORM)框架,它简化了Java应用与数据库之间的数据操作。Hibernate通过XML...
此外,Spring的JdbcTemplate和HibernateTemplate还可以用于实现数据库操作的模板方法模式,提高了代码的可读性和可重用性。 总的来说,Spring 2.5 和 Hibernate 的结合为Java开发人员提供了一套强大的工具,用于...
书里会讲解如何使用Spring的数据访问抽象层,如JdbcTemplate和HibernateTemplate,来简化数据库操作,同时保持良好的封装性和可测试性。 除此之外,Spring AOP(面向切面编程)也是书中的一大重点。AOP允许开发者...
在Spring框架中,数据库访问是核心功能之一,它提供了丰富的工具和API来简化与数据库的交互。本篇文章将深入探讨Spring中的数据库异常处理机制,帮助开发者更好地理解和处理在数据库操作中可能遇到的问题。 首先,...
对于数据库操作,Spring提供JdbcTemplate和HibernateTemplate,或者更高级的JPA支持。在这个配置实例中,我们可能需要用到HibernateTemplate,它简化了与Hibernate的交互。 接下来,Hibernate 4.2作为ORM(对象关系...
首先,我们需要了解Spring的JdbcTemplate和HibernateTemplate,它们是Spring提供的两种基础数据访问模板。JdbcTemplate简化了SQL操作,提供了事务管理、异常翻译等功能,而HibernateTemplate则基于ORM(对象关系映射...