· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [专题] IBM Rational高峰论坛 Windows 7十大功能
· [专题] 史上就危险7月 微软 BizSpark 计划介绍
· [IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 我也能做CTO_赛迪连载 赛迪七夕特别行动
· [热点] Chrome 4.0采用V8引擎 Java开发编程规范

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

发布时间:2007.06.13 05:51     来源:赛迪网技术社区    作者:dxaw

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调用。

(责任编辑:龚勋)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· J2EE基础:Struts框架的初学者入门知识 (06-11) · JSP新手入门教程:Actions使用方法详解 (06-08)
· 新手入门:Java数组特点及基本使用技巧 (06-08) · 新手入门:Spring的一些学习方法及意见 (06-08)
· Java新手入门:使用Eclipse的插件开发 (06-08) · 两种特殊的Java容器类List和Set类分析 (06-08)
· 在Hibernate中获取数据方式与缓存使用 (06-08) · 从基本概念开始全面认识和了解Java语言 (06-07)
· Java基础学习 Java中常用开发工具介绍 (06-07) · Java基础:详细讲解This对象的使用方法 (06-07)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
专题:扭亏为盈 联想09年Q2翻番
·专题:Tech·Ed 2009微..
·直播:2009互联网大会..
·迅雷搜狐"互搏" 谁动了..
专题:诺基亚危局已现 或重蹈摩托覆辙
·六股势力角逐4G标准 中..
·专题:联通iPhone并不贵..
·专题:排排坐开商店 三..
商务演示需求分析 多媒体会议室必备投影
·VMware在京隆重举行2009..
·专题:笔记本频道10月热..
·专题:学生机市场 惠普 ..
专题:Tech.Ed 2009微软技术大会
·专题:2009 SYBASE 亚太..
·专题:微软新一代桌面操..
·专题:2009年第3届CSDN..