首页 > 代码库 > Spring-mvc-jdbc知识点小结

Spring-mvc-jdbc知识点小结

来源:http://blog.csdn.net/mistygod/article/details/5755873

1、首先谈谈Spring-mvc

在使用Spring-mvc之前,为一直使用的是struts,关于struts的介绍为前面也曾小结过,所以这里就不多说了。还是来谈谈Spring的mvc吧.

Web开发大家都知道Servlet,和大多数基于Java的MVC框架一样,SpringMVC将所有的请求都经过一个前端Servlet控制器--DispatchServlet.DispatchServlet的工作就是将一个客户端的request请求分发给不同的springMVC控制器(Controller),所谓控制器就是处理请求的spring组件。不管那么多了,既然DispatchServlet是一个前端控制器(Servlet),那么就要在Web.xml配置它才行:

 

[java] view plaincopy
  1. <servlet>  
  2.         <servlet-name>wiscom</servlet-name>  
  3.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.         <load-on-startup>1</load-on-startup>  
  5.     </servlet>  
  6.   
  7.     <servlet-mapping>  
  8.         <servlet-name>wiscom</servlet-name>  
  9.         <url-pattern>*.do</url-pattern>  
  10.     </servlet-mapping>  

 

 

配置完DispatchServlet以后,我们就可以用它来控制所有的请求了.所有的以*.do结尾的请求都将会被拦截.下面我们就需要分解应用上下文了。首先在WEB_INF目录下创建一个wiscom-servlet.xml文件,根据上面的配置,DispatchServlet会载入wiscom-servlet.xml.

不过这里最好是将应用文件分解开来,将不同的配置文件对应于不同的应用层次。比如服务层的配置文件可以使用service-servlet.xml..

下面一步就需要配置上下文载入器了,这里我们使用的是Servlet的监听器实现的

 

 

[java] view plaincopy
  1. <listener>  
  2.    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  3. </listener>  
  4. <!--指定相应的spring配置文件位置 默认路径/WEB-INF/applicationContext.xml -->  
  5. <context-param>  
  6.       <param-name>contextConfigLocation</param-name>  
  7.       <param-value>  
  8.       /WEB-INF/wiscom-servlet.xml  
  9.       /WEB-INF/applicationContext-*.xml  
  10.       </param-value>  
  11.     </context-param>  

 

 

 

到这里spring-mvc的环境基本上已经完成了,下面我们需要思考一个问题,Spring的前端控制器是如何将请求分发到下面不同的Controller中去的以及Controller是如何显示相应的页面的??

带着上面的两个问题,我们继续走下去.创建一个Controller.这里有必要解释一下Controller.当请求到达DispatchServlet时,需要一些目录来指明请求应该被如何分配。此时处理器映射可以帮助DispatchServlet了解请求应该被分发到哪个Controller中。所以我们必须在wiscom-servlet.xml中配置相应的处理器映射(HandleMapping)

 

 

[xhtml] view plaincopy
  1. <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
  2.    <property name="mappings">  
  3.      <props>  
  4.         <prop key="/reg.do">regController</prop>  
  5.         <prop key="/register.do">registerController</prop>  
  6.         <prop key="/query.do">queryController</prop>  
  7.         <prop key="/handle.do">handleController</prop>  
  8.      </props>  
  9.    </property>  
  10.  </bean>  

 

 

 

这里使用的处理器映射的实现类是SimpleUrlHandleMapping.除此之外还有三种处理器映射类:

BeanNameUrlHandleMapping--根据控制器的名字将控制器映射到URL;

ControllerClassNameHandleMapping--通过将控制器的类名作为URL的基础将控制器映射到URL

CommonsPathMapHandleMapping--使用元数据映射控制器

 

在配置完处理器映射以后我们就可以创建自己的Controller来实现相应的业务了.spring为开发者提供了许多控制器,对于初学者而言会觉得很难选择(包括我自己).但是所有的Controller都实现了同一个接口:

 

[c-sharp] view plaincopy
  1. public interface Controller {  
  2. ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;  
  3. }  

 

对于那么多种Controller到底该如何选择,这里就不讨论了,根据业务的不同需求而选用合适的Controller。这里主要常用的Controller是AbstractController和SimpleFormController.下面就给出一个简单的实例使用spring-mvc实现用户注册功能:

创建自己的Controller类,继承于SimpleFormController(用于表单提交)

 

 

[java] view plaincopy
  1. public class RegisterController extends SimpleFormController {  
  2.       
  3.     private HandleUserDao handleUserDao;  
  4.     @Override  
  5.     protected ModelAndView onSubmit(Object command) throws Exception {  
  6.         RegisterUser r = (RegisterUser) command;  
  7.         handleUserDao.saveUser(r);  
  8.         return new ModelAndView(this.getSuccessView());  
  9.     }  
  10.     public void setHandleUserDao(HandleUserDao handleUserDao) {  
  11.         this.handleUserDao = handleUserDao;  
  12.     }  
  13. }  

 

 

解释一下:这里为将HandleUserDao直接注入到了Controller中,调用后台类实现用户注册功能.需要提及一下的是这里的ModelAndView对象.这里我们不免产生了疑惑, RegisterController是如何在实习业务功能后跳转到相应的页面中去的?

为了帮助springMVC了解使用哪一个JSP,我们需要在wiscom-servlet.xml中声明一个bean:一个视图解析器

 

[c-sharp] view plaincopy
  1. <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  2.   <property name="prefix" value=http://www.mamicode.com/"/WEB-INF/show/"></property>  
  3.   <property name="suffix" value=http://www.mamicode.com/".jsp"></property>  
  4. </bean>  

 

通过视图解析器DispatchServlet将请求导向/WEB-INF/show/xxx.jsp呈现给用户.

 

 

2、使用Spring-jdbc操作数据库:

2.1、使用JDBC模板(JdbcTemplate、NamedParameterTemplate、SimpleJdbcTemplate)

在操作数据库之前我们必须配置数据源

 

 

[xhtml] view plaincopy
  1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
  2.   <property name="driverClassName" value=http://www.mamicode.com/"oracle.jdbc.driver.OracleDriver"/>  
  3.   <property name="url" value=http://www.mamicode.com/"jdbc:oracle:thin:@172.18.33.234:1521:URP9208"/>  
  4.   <property name="username" value=http://www.mamicode.com/"usr_px"/>  
  5.   <property name="password" value=http://www.mamicode.com/"wiscom"/>  
  6.   <property name="initialSize" value=http://www.mamicode.com/"1"/><!-- 池启动时创建的连接数量 -->  
  7.   <property name="maxActive" value=http://www.mamicode.com/"10"/><!-- 配置数据库最大连接数 -->  
  8. </bean>  

 

 

这里我们使用的是jdbcTemplate类实现JDBC的CRUD操作.

JdbcTemplate是core包的核心类。它替我们完成了资源的创建以及释放工作,从而简化了我们对JDBC的使用。它还可以帮助我们避免一些常见的错误,比如忘记关闭数据库连接。JdbcTemplate将完成JDBC核心处理流程,比如SQL语句的创建、执行,而把SQL语句的生成以及查询结果的提取工作留给我们的应用代码。它可以完成SQL查询、更新以及调用存储过程,可以对ResultSet进行遍历并加以提取。它还可以捕获JDBC异常并将其转换成org.springframework.dao包中定义的,通用的,信息更丰富的异常。 

 

 

[java] view plaincopy
  1. public class HandleUserDaoImpl implements HandleUserDao {  
  2.       
  3.     private JdbcTemplate jdbcTemplate;  
  4.       
  5.     static String QUERY_ALL = " SELECT * FROM RegisterUser_hchen " ;  
  6.     public List<RegisterUser> queryUsers(String userName) {  
  7.         //String QUERY_NAME = "select * from RegisterUser_hchen where username like ‘%"+userName+"%‘" ;  
  8.         String QUERY_NAME =QUERY_ALL + " where username like ‘%"+userName+"%‘ ";  
  9.         @SuppressWarnings("unchecked")  
  10.         List<RegisterUser> list = jdbcTemplate.queryForList(QUERY_NAME);  
  11.         return list;  
  12.     }  
  13.   
  14.          public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {  
  15.         this.jdbcTemplate = jdbcTemplate;  
  16.     }  
  17. }  

 

上面简单的演示了一下使用jdbcTemplate操作数据库实现模糊查询的功能,这里我们将jdbctTemplate注入到实现类中

 

[xhtml] view plaincopy
  1. <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
  2.   <property name="dataSource" ref="dataSource"></property>  
  3.  </bean>  
  4.    
  5.  <bean id="handleUserDao" class="wiscom.dao.HandleUserDaoImpl">  
  6.    <property name="jdbcTemplate" ref="jdbcTemplate"></property>  
  7.  </bean>  

 

 

同样我们使用Spring对jdbc的DAO支持类实现相应的CRUD操作,可以选择继承JdbcDaoSupport类,这里就不再解释了...下班啦~~

 

Spring-mvc-jdbc知识点小结