http://www.open-open.com/lib/view/open1349272132291.html
SpringMVC +Spring+ SpringJDBC整合实例。文件结构:


3S3(3Spring3.x)的整合大致如下:
1)web.xml的配置:
01 |
<?xml version="1.0" encoding="UTF-8"?> |
02 |
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"> |
03 |
<display-name></display-name> |
05 |
<welcome-file>index.jsp</welcome-file> |
08 |
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> |
11 |
<servlet-name>spring</servlet-name> |
12 |
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> |
14 |
<param-name>contextConfigLocation</param-name> |
15 |
<param-value>classpath:*applicationContext.xml</param-value> |
17 |
<load-on-startup>1</load-on-startup> |
20 |
<servlet-name>spring</servlet-name> |
21 |
<url-pattern>*.do</url-pattern> |
25 |
<filter-name>setcharacter</filter-name> |
26 |
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> |
28 |
<param-name>encoding</param-name> |
29 |
<param-value>utf-8</param-value> |
33 |
<filter-name>setcharacter</filter-name> |
34 |
<url-pattern>/*</url-pattern> |
2)applicationContext.xml的配置:
001 |
<?xml version="1.0" encoding="UTF-8" ?> |
002 |
<beans xmlns="http://www.springframework.org/schema/beans" |
003 |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p" |
004 |
xmlns:context="http://www.springframework.org/schema/context" |
005 |
xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx" |
006 |
xsi:schemaLocation="http://www.springframework.org/schema/beans |
007 |
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd |
008 |
http://www.springframework.org/schema/context |
009 |
http://www.springframework.org/schema/context/spring-context-3.0.xsd |
010 |
http://www.springframework.org/schema/tx |
011 |
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd |
012 |
http://www.springframework.org/schema/aop |
013 |
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> |
015 |
<context:property-placeholder location="classpath:jdbc.properties" /> |
018 |
<context:component-scan base-package="com.controller" /> |
019 |
<context:component-scan base-package="com.service" /> |
020 |
<context:component-scan base-package="com.dao" /> |
023 |
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" |
024 |
destroy-method="close"> |
025 |
<property name="driverClass"> |
026 |
<value>${jdbc.driverClassName}</value> |
028 |
<property name="jdbcUrl"> |
029 |
<value>${jdbc.url}</value> |
031 |
<property name="user"> |
032 |
<value>${jdbc.username}</value> |
034 |
<property name="password"> |
035 |
<value>${jdbc.password}</value> |
038 |
<property name="minPoolSize"> |
042 |
<property name="maxPoolSize"> |
046 |
<property name="initialPoolSize"> |
050 |
<property name="maxIdleTime"> |
054 |
<property name="acquireIncrement"> |
059 |
<property name="maxStatements"> |
063 |
<property name="idleConnectionTestPeriod"> |
067 |
<property name="acquireRetryAttempts"> |
072 |
<property name="breakAfterAcquireFailure"> |
077 |
<property name="testConnectionOnCheckout"> |
083 |
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> |
084 |
<property name="dataSource" ref="dataSource"></property> |
088 |
<bean id="transactionManager" |
089 |
class="org.springframework.jdbc.datasource.DataSourceTransactionManager" |
090 |
p:dataSource-ref="dataSource" /> |
093 |
<aop:config proxy-target-class="true"> |
094 |
<aop:pointcut id="serviceMethod" |
095 |
expression="
execution(* com.service..*(..))" /> |
096 |
<aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice" /> |
098 |
<tx:advice id="txAdvice" transaction-manager="transactionManager"> |
100 |
<tx:method name="*" /> |
106 |
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> |
111 |
class="org.springframework.web.servlet.view.InternalResourceViewResolver" |
112 |
p:viewClass="org.springframework.web.servlet.view.JstlView"p:prefix="/WEB-INF/jsp/" |
3)jdbc.properties的配置:
1 |
jdbc.driverClassName=com.mysql.jdbc.Driver |
4)log4j.properties的配置:
1 |
log4j.rootLogger=DEBUG,A1 |
2 |
#
\u8f93\u51fa\u5230\u63a7\u5236\u53f0 |
3 |
log4j.appender.A1=org.apache.log4j.ConsoleAppender |
4 |
log4j.appender.A1.layout=org.apache.log4j.PatternLayout |
5 |
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd
HH\:mm\:ss} [\u65E5\u5FD7\u4FE1\u606F] %m%n |
5)User.java
03 |
import java.io.Serializable; |
05 |
@SuppressWarnings("serial") |
06 |
public class User implements Serializable
{ |
09 |
private String
userName; |
10 |
private String
password; |
12 |
public String
getUserName() { |
15 |
public void setUserName(String
userName) { |
16 |
this.userName
= userName; |
18 |
public String
getPassword() { |
21 |
public void setPassword(String
password) { |
22 |
this.password
= password; |
27 |
public void setId(int id)
{ |
6)UserController.java
01 |
package com.controller; |
03 |
import org.springframework.beans.factory.annotation.Autowired; |
04 |
import org.springframework.stereotype.Controller; |
05 |
import org.springframework.web.bind.annotation.RequestMapping; |
06 |
import org.springframework.web.servlet.ModelAndView; |
08 |
import com.model.User; |
09 |
import com.service.UserService; |
12 |
public class UserComtroller
{ |
15 |
private UserService
userService; |
17 |
@RequestMapping("/user/loginView") |
18 |
public String
loginView(){ |
22 |
@RequestMapping("/user/registerView") |
23 |
public String
registerView(){ |
27 |
@RequestMapping("/user/login") |
28 |
public ModelAndView
login(User user){ |
29 |
ModelAndView
mav = new ModelAndView(); |
30 |
User
u = userService.loginCheck(user); |
32 |
mav.setViewName("login"); |
33 |
mav.addObject("errorMsg","用户名或密码有误!"); |
37 |
mav.setViewName("success"); |
38 |
mav.addObject("user",
u); |
43 |
@RequestMapping("/user/register") |
44 |
public ModelAndView
register(User user){ |
45 |
ModelAndView
mav = new ModelAndView(); |
46 |
if(userService.register(user)){ |
47 |
mav.setViewName("register_succ"); |
51 |
mav.setViewName("register"); |
52 |
mav.addObject("errorMsg","用户名已被占用,请更换!!"); |
7)UserService Interface
6 |
public interface UserService
{ |
7 |
public boolean register(User
user); |
8 |
public User
loginCheck(User user); |
8)UserServiceImp.java
01 |
package com.service.implement; |
03 |
import org.springframework.beans.factory.annotation.Autowired; |
04 |
import org.springframework.stereotype.Service; |
06 |
import com.dao.UserDao; |
07 |
import com.model.User; |
08 |
import com.service.UserService; |
11 |
public class UserServiceImpl implements UserService
{ |
14 |
private UserDao
userDao; |
17 |
public User
loginCheck(User user) { |
18 |
User
u = userDao.findUserByUserName(user.getUserName()); |
19 |
System.out.println("id="+u.getId()+",
userName="+u.getUserName()+",
password="+u.getPassword()); |
20 |
if(user.getPassword().equals(u.getPassword())){ |
29 |
public boolean register(User
user) { |
30 |
User
u = userDao.findUserByUserName(user.getUserName()); |
32 |
userDao.register(user); |
36 |
System.out.println("id="+u.getId()+",
userName="+u.getUserName()+",
password="+u.getPassword()); |
9)UserDao Interface
5 |
public interface UserDao
{ |
6 |
public void register(User
user); |
7 |
public User
findUserByUserName(final String
userName); |
10)UserDaoImpl.java
01 |
package com.dao.implement; |
03 |
import java.sql.ResultSet; |
04 |
import java.sql.SQLException; |
06 |
import org.springframework.beans.factory.annotation.Autowired; |
07 |
import org.springframework.jdbc.core.JdbcTemplate; |
08 |
import org.springframework.jdbc.core.RowCallbackHandler; |
09 |
import org.springframework.stereotype.Repository; |
11 |
import com.dao.UserDao; |
12 |
import com.model.User; |
15 |
public class UserDaoImpl implements UserDao
{ |
18 |
private JdbcTemplate
jdbcTemplate; |
21 |
public void register(User
user) { |
22 |
String
sqlStr = "insert
into user(uname,pwd) values(?,?)"; |
23 |
Object[]
params = new Object[]{user.getUserName(),user.getPassword()}; |
24 |
jdbcTemplate.update(sqlStr,
params); |
28 |
public User
findUserByUserName(String userName) { |
29 |
String
sqlStr = "select
id,uname,pwd from user where uname=?"; |
30 |
final User
user = new User(); |
31 |
jdbcTemplate.query(sqlStr, new Object[]{userName}, new RowCallbackHandler()
{ |
33 |
public void processRow(ResultSet
rs) throws SQLException
{ |
34 |
user.setId(rs.getInt("id")); |
35 |
user.setUserName(rs.getString("uname")); |
36 |
user.setPassword(rs.getString("pwd")); |
11)单元测试:test/com.service.implement
-UserServiceImplTest.java
01 |
package com.service.implement; |
03 |
import org.junit.Test; |
04 |
import org.junit.runner.RunWith; |
05 |
import org.springframework.beans.factory.annotation.Autowired; |
06 |
import org.springframework.test.context.ContextConfiguration; |
07 |
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; |
09 |
import com.model.User; |
10 |
import com.service.UserService; |
13 |
@RunWith(SpringJUnit4ClassRunner.class) |
14 |
@ContextConfiguration(locations="/applicationContext.xml") |
15 |
public class UserServiceTest
{ |
18 |
private UserService
userService; |
21 |
public void testLoginCheck(){ |
22 |
User
user = new User(); |
23 |
user.setUserName("manager2"); |
24 |
user.setPassword("123"); |
25 |
if(null!=userService.loginCheck(user)) |
26 |
System.out.println("------OK!!-----"); |
28 |
System.out.println("------Sorry!!-----"); |
32 |
public void testRegister(){ |
33 |
User
user = new User(); |
34 |
user.setUserName("manager"); |
35 |
user.setPassword("123"); |
36 |
System.out.println(userService.register(user)); |
12)测试结果:

