`
bcc123hf
  • 浏览: 47639 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jdbcTemplate和hibernateTemplate之二

阅读更多
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入门

    5、 Spring提供的众多辅助类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate 6、 Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts2等,更便于应用的开发。

    spring笔记

    spring的主要特性。 (1)降低组件之间的耦合度,实现软件各层之间的解耦...(5)容器提供的众多辅作类,使用这些类能够加快应用的开发,如:JdbcTemplate、HibernateTemplate. (6)对主流的应用框架提供了集成支持。

    spring集成Hibernate

    本文主要讲解如何在Spring4.0.4下整合Hibernate4.3.6; 主要介绍了如下内容: 项目结构的规划; Spring MVC的配置和使用; Spring下整合Hibernate的具体过程;...jdbcTemplate和HibernateTemplate两种方式操作数据库;

    Spring中文帮助文档

    12.2.3. The HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器...

    Spring3.07+Hibernate+sturts1.3测试

    spring 没使用注解,全配置文件 hibernateTemplate,jdbcTemplate hibernate ORM

    Spring控制Hibernate中的事务传播特性与隔离级别操作.docx

    Spring控制Hibernate中的事务传播特性与隔离级别操作,通过利用spring和Hibernate的两个HibernateTemplate 和 jdbcTemplate类,实现数据的交互。

    EOSS V1.0 企业运营支撑系统(基于RBAC原理的权限管理)

    SSH2,封装hibernateTemplate和jdbcTemplate, 使用dispalytag做数据报表,可轻松导出查询出的所有Excel,多种实用工具类,统一的编码风格,完整的其于RBAC原理的权限管理系统,使你能其于用户,角色,权限的功能之...

    Spring持久化模板总结

    总结对比了Spring对JDBCTemplate和SpringTemplate的整合使用方法,尤其JdbcDaoSupport和HibernateDaoSupport的使用方法

    struts2.3.x+spring3.1.x+hibernate3.6 demo

    第二 spring3.1 不知道为什么不没有了HibernateTemplate的封装,又是一个很悲剧的事情! 谷歌百度后,说spring3.1还没有对hibernate4.1开始支持,具体情况不知道,有知道告诉我一下!呵呵 不懂! 我这里有测试的demo...

    MyEclipse 6 Java 开发中文教程第十章

    214 <br>10.5.1 DataSource 和 JDBCTemplate开发... 214 <br>10.5.2 Hibernate 整合 Spring开发... 223 <br>10.5.2.1 创建项目,添加必要的开发功能... 223 <br>10.5.2.2 反向工程生成Spring整合...

    spring.doc

    5.2.1 HibernateTemplate模板 131 5.2.2 声明式事务 131 配置XML文件 131 拓展: 132 注解形式: 137 拓展: 138 6 Struts2+spring+hibernate 141 6.1 需要添加的jar包 141 6.2 Spring融合web服务器 141 6.3 struts....

    《MyEclipse 6 Java 开发中文教程》前10章

    10.5.1 DataSource 和 JDBCTemplate开发 227 10.5.2 Hibernate 整合 Spring开发 236 10.5.2.1 创建项目,添加必要的开发功能 236 10.5.2.2 反向工程生成Spring整合Hibernate的DAO 238 10.5.2.3 用Spring 1.2 的事务...

    Web服务启动时自动加载Servlet,并读取数据库内容

    我操作数据库用的是spring的HibernateTemplate和JdbcTemplate,访问数据库是以bean注入的方式,在action里注入service的实现,读取数据库数据,其实现在的关键就是得到这个service的实例化对象,

    Java Web程序设计教程

    14.2.4使用hibernatetemplate 281 14.2.5管理hibernate事务 282 14.3项目实战——学生成绩查询系统 283 本章小结 292 课后练习 293 第15章图书馆管理系统 294 15.1系统功能解析 294 15.2系统数据库设计 295 ...

    Spring.3.x企业应用开发实战(完整版).part2

    第2篇 IoC和AOP 第3章 IoC容器概述 3.1 IoC概述 3.1.1 通过实例理解IoC的概念 3.1.2 IoC的类型 3.1.3 通过容器完成依赖关系的注入 3.2 相关Java基础知识 3.2.1 简单实例 3.2.2 类装载器ClassLoader 3.2.3 Java反射...

    spring in action英文版

     4.4.3 用HibernateTemplate访问Hibernate  4.4.4 HibernateDaoSupport的子类  4.5 Spring和JDO  4.5.1 配置JDO  4.5.2 用JdoTemplate访问数据库  4.6 Spring和iBATIS  4.6.1 配置SQL Map  ...

    基于SpringJDBC的轻量级ORM框架sborm.zip

    2、基于spring jdbc的上层封装,底层jdbc操作基于JdbcTemplate,对于使用spring jdbc的人会有一点价值,比较简洁的封装可以节省很多重复劳动,具体节省多少可以看看example; 3、实现一套简单的ORM(直接使用...

    Spring3.x企业应用开发实战(完整版) part1

    第2篇 IoC和AOP 第3章 IoC容器概述 3.1 IoC概述 3.1.1 通过实例理解IoC的概念 3.1.2 IoC的类型 3.1.3 通过容器完成依赖关系的注入 3.2 相关Java基础知识 3.2.1 简单实例 3.2.2 类装载器ClassLoader 3.2.3 Java反射...

    Spring 2.0 开发参考手册

    12.5.1. iBATIS 1.x和2.x的概览与区别 12.5.2. iBATIS SQL Maps 1.x 12.5.3. iBATIS SQL Maps 2.x 12.6. JPA 12.6.1. 在Spring环境中建立JPA 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于原生的JPA实现...

Global site tag (gtag.js) - Google Analytics