扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国IT实验室 来源:中国IT实验室 2007年9月30日
关键字:
在本页阅读全文(共4页)
PutDataWorker继承了SqlUpdate类,SqlUpdate是一个用来处理繁重的SQL插入和修改调用的Spring模板类。declareParameter()方法是用来告诉Spring,这个SQL statement中的数据类型分别是字符串和数字类型。
注意,PutDataWorker是一个非常瘦的类。它调用super()方法传递一个DataSource和
SQL statement给它的父类,用declareParameter()来描述这个查询。SqlUpdate通过几个JDBC关联对象和闭合连接(closing connections,就是打开一个链接,处理完毕,关闭链接)来处理真正的工作。SimpleDAO.putDate()方法也是相当简洁的:
public class SimpleDAO {
public void putData() {
for( ... ){
// ... "nameParam" and "numberParam" are
// local loop variables ...
Object[] params = {
nameParam , // variable is a Java String
numberParam // some Java numeric type
} ;
_putDataWorker.update( params ) ;
}
}
}
putData()方法用来把数据存储到数据库。注意这个方法是把工作委派给了它的worker类(也就是_putDataWorker),实际上是它的worker类继承SqlUpdate而来的方法。SqlUpdate.update()方法负责取数据,关闭JDBC连接和其他相关的Statement对象。也就是我可以丢弃一些我写的通用的JDBC代码类甚至是整个DbUtil类,DbUtil类提供了一些方法,可以用来很方便的关闭Connection,Statement和ResultSet.
SqlUpdate是用来修改数据,Spring的MappingSqlQuery则用来查询。注意看GetDateWorker中的mapRow()方法:
package pool_test.data.jdbc ;
import org.springframework ... MappingSqlQuery ;
// inside class SimpleDAO ...
private class GetDataWorker
extends MappingSqlQuery {
// ...constructor similar to PutDataWorker...
protected Object mapRow( final ResultSet rs ,
final int rowNum ) throws SQLException
{
final SimpleDTO result = new SimpleDTO(
rs.getString( "names" ) ,
rs.getInt( "numbers" )
) ;
return( result ) ;
} // mapRow()
}
这个方法负责把ResultSet的表列数据转换为可用的SimpleDTO对象,一条数据对应一个对象。对结果集中的每一行Spring都调用此方法。当GetDataWorker.mapRow()和ResultSet两者相结合时,它不再负责关闭记录集或者去检查是否在处理过程中
拉下了某行。
用SpringMVC修改Web层
既然我有了Spring的基础结构和数据层代码,接下来就该处理web层了。SpringMVC的控制器接口是web层中很重要的类:
package org.springframework ...
interface Controller {
public ModelAndView handleRequest(
HttpServletRequest request ,
HttpServletResponse response
) throws Exception ;
}
handleRequest()方法是入口点,和Struts Action的情况类似,是自己的页面控制器:框架提供了servlet请求和响应对象,控制器的实现类则返回业务逻辑的结果(一个模型对象)和一个指示器,指示器用来说明怎样显示结果(也就是视图)。ModelAndView的模型是一个将要显示到视图层的一个业务对象或者其他数据的一个Map。在例子代码中,视图是要个JSP,但是Spring 的MVC也支持 Velocity templates 和 XSLT。
例子应用的servlet页面控制器太简单以致于没有看到Spring MVC的强大之处。因此,最新的页面控制器都藏在大多数的教科书的例子中。
旧的页面控制器也有类似的策略,将一个Map对象从servlets传递到jsps.结果是,我不需要对传递到jsp的工作做任何的改变。我只需要用一些spring特殊的标签库。
对于新的基于Spring的控制器,还有一些工作要做,尽管他们可以通过调用ObjectRegistry类查找DAO.但是在一个干净的spring中,DAO应该在一个特殊的web xml配置文件中指定,这里是通过WEB-INF/SpringMVC-servlet.xml来指定的。
听上去相当简单,对不对?我现在只需要将对象注册的Spring配置文件(spring-objectregistry.xml)添加到web.xml中,像这样:
<context-param>
<param-name>
contextConfigLocation
</param-name>
<param-value>
classpath*:spring-objectregistry.xml
</param-value>
<context-param>
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者