JSPCN主页 | JSP空间 | 网站制作 | JSP下载 | JSP论坛 | JSP教程 | 关于JSPCN | 联系我们
JSP虚拟主机,jsp空间,java空间,java虚拟空间,详细请点击进入
做最专业的JSP中文网站 当前位置首页--JAVA技术--Spring  
文章搜索:
关键字 标题
  
JSP中文网内容管理系统(JCMS)
JSP虚拟主机
网络笔记本
网摘,图片,笔记收藏
虚拟服务器

JSPCN文章目录分类
JSP配置[219]JSP基础[136]
中文问题[69]上传问题[27]
JAVABEAN[46]数据库[212]
文件操作[126]图片声音[17]
JSP其他[57]时间相关[16]
JAVAMAIL[72]STRUTS[144]
开发工具[28]教程系列[157]
JSP实例[89]
JAVA基础[421]APPLET[78]
JAVA网络[179]Applica[115]
Servlet[98]XML[163]
J2ME[257]J2EE[374]
考试相关[63]JAVA线程[90]
EJB[261]Swing[26]
Java API[141]声音图片[28]
异常处理[33]JAVA实例[290]
JAVA类[139]SUN[89]
Hibernate[6]JMX[8]
Spring[34]
本版推荐文章 
本版热点文章 
相关文章链接 
 
spring持久化
作者:     文章来源:
访问次数:88次     加入时间:2007年03月14日
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调用。
Copyright © 2002-2005 JSPCN.net. All rights reserved.
JSP中文网    备案序号:蜀ICP备05001583号
成都恒海科技发展有限公司    成都市一环路南二段6号新瑞楼三楼8号