`
brucejiang
  • 浏览: 31993 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring持久化的异常处理和模板类的介绍

阅读更多
引用
http://w.xue163.com/html/2008610/455231.html

spring持久化可以从几个方面来看:

1.对异常的处理

spring中提供了DataAccessException,这个异常类是对现有多数据库抛出异常的封装,并可以对不同数据库抛出异常的状态码进行解释。因此,在业务层中方法声明throws DataAccessException,可以不必担心抛出我们没有捕获到的数据库操作异常,把精力放在“业务异常”上面。

2.模板类

spring设计为了更好的管理异常、事务,避免业务方法中重复的try/catch块,设计出模板类,最重要的两个为JdbcTemplate,HibernateTemplate,spring的模板类都是线程安全的,由ThreadLocal进行资源管理。

使用JdbcTemplate,HibernateTemplate必须注入DateSource,SesssionFactory,通过构造方法注入。例:


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
   destroy-method="close">
  <property name="driverClassName">
  <value>${jdbc.driverClassName}</value>
  </property>
  <property name="url"><value>${jdbc.url}</value></property>
  <property name="username"><value>${jdbc.username}</value></property>
  <property name="password"><value>${jdbc.password}</value></property>
</bean>
  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <constructor-org><ref bean="dataSource"/></constructor-arg>
</bean>

HibernateTemplate配置与上相同,配置sessionFactory.把配置好的jdbcTemplate,hibernateTemplate注入到我们的DAO或业务类中,即可使用。但是通常我们有很多的DAO类或业务类,这样做的话我们每个类都要注入一次,解决这样的问题,我们可以把模板类放到父类中,子类调用即可。

这一切,spring已经都想到了,spring提供了JdbcDaoSupport,HibernateDaoSupport类,这两个类都是abstract class,不能实例化,我们的业务类继承这两个类,通过getJdbcTemplate(),getHibernateTemplate()方法即可得到对应的模板类。当然,我们首先要将模板类注入到这两个XXXDaoSupport类中。


<bean id = "jdbcDaoSupport"
class="org.springframework.jdbc.core.support.JdbcDaoSupport">
<property name="jdbcTemplate"><ref bean = "jdbcTemplate"/></property>
    </bean>

JdbcTemplate类用法:


getJdbcTemplate().query("select * from news",new RowCallBackHandler(){
           public void processRow(ResultSet rs ){....}
     }

    getJdbcTemplate().update(".....");

    getJdbcTemplate().update("update news set title=? where id=?",
    new PreparedStatementSetter(){
        public void setValue(PreparedStatement pstmt) throws SQLException{
            pstmt.setString("dd");
            pstmt.setInt(2);
       }
   }

   getHibernateTemplate().execute(new HibernateCallback(){
       public Object doInHibernate)(Session s) throws HibernateException {
           ......
       }
   }

HibernateTemplate用法:


getHibernateTemplate().execute(new HibernateCallback(){
      public Object doInHibernate(Session s) throws SQLException {
          return s.find("...");
      }
  }

在开发中直接使用这些模板,代码看起来可能不是很直观,本身这些模板只是为我们省了一些异常处理等代码,只是对原有hibernate session,jdbc connection,datasource的一个封装。所以,在实际开发中,为了灵活的使用模板,并充分发挥原有session等功能,还要封装一个BaseDao类,把常用CRUD、分页等操作封装供子类DAO调用。

(责任编辑:龚勋)

分享到:
评论

相关推荐

    spring4.1核心包

    包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 18. spring-webmvc-4.1.1.RELEASE.jar 包含...

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

    8.3.2 Spring为不同持久化技术所提供的模板类 8.4 数据源 8.4.1 配置一个数据源 8.4.2 获取JNDI数据源 8.4.3 Spring的数据源实现类 8.5 小结 第9章 Spring的事务管理 9.1 数据库事务基础知识 9.1.1 何为数据库事务 ...

    第24次课-1 Spring与Hibernate的整合

    异常包装:Spring能够包装Hibernate的异常,使开发者可以选择恰当的层来处理异常。 24.2 管理SessionFactory Hibernate的SessionFactory,是单个数据库映射关系编译后的内存镜像,是Hibernate执行持久化访问的基础。...

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.10. 处理异常 13.11. 惯例优先原则(convention over configuration) 13.11.1. 对控制器的支持: ControllerClassNameHandlerMapping 13.11.2. 对模型的支持:ModelMap (ModelAndView) 13.11.3. 对视图的支持: ...

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

    8.3.2 Spring为不同持久化技术所提供的模板类 8.4 数据源 8.4.1 配置一个数据源 8.4.2 获取JNDI数据源 8.4.3 Spring的数据源实现类 8.5 小结 第9章 Spring的事务管理 9.1 数据库事务基础知识 9.1.1 何为数据库事务 ...

    Spring in Action(第2版)中文版

    13.4处理异常 13.5小结 第14章渲染web视图 14.1视图解析 14.1.1使用模板视图 14.1.2解析视图bean 14.1.3选择视图解析器 14.2使用spring模板 14.2.1绑定表单数据 14.2.2渲染被存储在外部的文本 14.2.3显示...

    Spring in Action(第二版 中文高清版).part2

    13.4 处理异常 13.5 小结 第14章 渲染Web视图 14.1 视图解析 14.1.1 使用模板视图 14.1.2 解析视图Bean 14.1.3 选择视图解析器 14.2 使用Spring模板 14.2.1 绑定表单数据 14.2.2 渲染被存储在外部的文本 ...

    Spring in Action(第二版 中文高清版).part1

    13.4 处理异常 13.5 小结 第14章 渲染Web视图 14.1 视图解析 14.1.1 使用模板视图 14.1.2 解析视图Bean 14.1.3 选择视图解析器 14.2 使用Spring模板 14.2.1 绑定表单数据 14.2.2 渲染被存储在外部的文本 ...

    Spring-generator一键生成数据库文件

    工具默认集成了以 MyBatis 作为持久化层的模板,如果需要 JPA 相关等模板可以自己参考工具的文档进行编写。 特色功能预览 生成实体类 生成 WEB API相关接口 Controller 生成业务逻辑相关的 Service/ServiceImpl ...

    ssh(structs,spring,hibernate)框架中的上传下载

     通过这样的设置和配置,我们就可以象持久化表的一般字段类型一样处理Blob字段了。  以上是Spring+Hibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中...

    Spring-Generator

    工具默认集成了以MyBatis作为持久化层的模板,如果需要JPA相关等模板可以自己参考工具的文档进行编写 生成实体类 生成WEB API相关接口 Controller 生成业务逻辑相关的Service/ServiceImpl 生成操作数据库的Dao接口...

    基于vue的MOBA类游戏攻略分享平台--lw.zip

    数据存储方面,使用MySQL数据库进行持久化存储,保证了数据的可靠性和一致性。 前端页面开发可以选择使用JSP或Vue框架,JSP提供了简单的模板引擎和服务器端渲染能力,而Vue则提供了更灵活和交互性更强的前端开发...

    ZhouYu:(周瑜)Java-SpringBoot持久化WebShell

    工具仅用于安全研究,禁止使用工具发起...修改的类类插入webshel​​l后,通过持久化到jar进行类替换,达到webshel​​l持久化,任你如何重启都无法甩掉 一,打包编译 命令: gradle :agent:shadowJar 或 ./gradlew

    本科毕业设计,基于Java-web开发的内容管理系统(java cms),使用SpringBoot、vue、MyBatis等技术

    Mybatis:持久化框架。 FreeMarker:网站模板组件。 Lucene:全文检索组件。 前端技术 TypeScript: JavaScript的一个超集。 Vue3:JavaScript框架。 ElementPlus:Vue 3 UI 框架。 Vite: 下一代前端开发与构建工具。...

    Java在线投票系统 - 实现在线投票和统计功能

    我们将使用Java编程语言和一些常见的开发库来完成这个项目。 以下是本实战博客的主要内容: 项目概述 ...Spring Data JPA:用于简化数据访问的持久化框架。 H2数据库:内存数据库,用于存储投票数据。

    使用Java构建博客引擎

    博客引擎是一个允许用户创建、编辑和发布博客文章的应用程序。在这个实战博客中,我们将创建一个简单的Java博客引擎...Spring Data JPA:用于简化数据访问的持久化框架。 H2数据库:内存数据库,用于存储博客文章数据。

    SpringMybatisRedis整合

    在spring的配置文件中注入如下模板类,然后直接注入调用 &lt;bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"&gt; ⑶UserSupportDao方式 方式 : 直接继承该类...然后调用...

    低清版 大型门户网站是这样炼成的.pdf

    2.1.4 struts 2的常用类介绍 38 2.1.5 struts 2的业务控制器action实现 39 2.1.6 struts 2的处理结果result 45 2.1.7 功能强大的表达式语言ognl 47 2.1.8 struts 2的运行流程分析—helloworld 48 2.1.9 struts ...

    火炬博客系统7

    Struts负责管理用户的请求,做出响应,提供控制器,委派调用业务逻辑,处理异常,UI 验证等,Struts用来作表示层部分,起控制和显示作用; 本系统使用 Spring 的DelegatingRequestProcessor 覆盖 Struts 的 ...

    火炬博客系统6

    Struts负责管理用户的请求,做出响应,提供控制器,委派调用业务逻辑,处理异常,UI 验证等,Struts用来作表示层部分,起控制和显示作用; 本系统使用 Spring 的DelegatingRequestProcessor 覆盖 Struts 的 ...

Global site tag (gtag.js) - Google Analytics