SpringMVC + Spring + SpringJDBC整合

来源:互联网 发布:软件质量保证计划书 编辑:程序博客网 时间:2024/06/03 19:37


http://www.open-open.com/lib/view/open1349272132291.html

SpringMVC +Spring+ SpringJDBC整合实例。文件结构:

SpringMVC + Spring + SpringJDBC整合

SpringMVC + Spring + SpringJDBC整合

 

3S3(3Spring3.x)的整合大致如下:

1)web.xml的配置:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appxmlns: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">
  <display-name></display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <listener>
    <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:*applicationContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <!-- 统一字符编码为UTF-8 -->
  <filter>
    <filter-name>setcharacter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>setcharacter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

 2)applicationContext.xml的配置:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
 
    <context:property-placeholderlocation="classpath:jdbc.properties"/>
 
    <!-- 扫描类包,将标注Spring注解的类自动转化Bean,同时完成Bean的注入 -->
    <context:component-scanbase-package="com.controller"/>
    <context:component-scanbase-package="com.service"/>
    <context:component-scanbase-package="com.dao"/>
 
    <!-- 配置数据源 -->
    <beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <propertyname="driverClass">
            <value>${jdbc.driverClassName}</value>
        </property>
        <propertyname="jdbcUrl">
            <value>${jdbc.url}</value>
        </property>
        <propertyname="user">
            <value>${jdbc.username}</value>
        </property>
        <propertyname="password">
            <value>${jdbc.password}</value>
        </property>
        <!--连接池中保留的最小连接数。 -->
        <propertyname="minPoolSize">
            <value>5</value>
        </property>
        <!--连接池中保留的最大连接数。Default: 15 -->
        <propertyname="maxPoolSize">
            <value>30</value>
        </property>
        <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
        <propertyname="initialPoolSize">
            <value>10</value>
        </property>
        <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
        <propertyname="maxIdleTime">
            <value>60</value>
        </property>
        <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
        <propertyname="acquireIncrement">
            <value>5</value>
        </property>
        <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements 属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
            如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->
        <propertyname="maxStatements">
            <value>0</value>
        </property>
        <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
        <propertyname="idleConnectionTestPeriod">
            <value>60</value>
        </property>
        <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
        <propertyname="acquireRetryAttempts">
            <value>30</value>
        </property>
        <!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效 保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试
            获取连接失败后该数据源将申明已断开并永久关闭。Default: false -->
        <propertyname="breakAfterAcquireFailure">
            <value>true</value>
        </property>
        <!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的 时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
            等方法来提升连接测试的性能。Default: false -->
        <propertyname="testConnectionOnCheckout">
            <value>false</value>
        </property>
    </bean>
 
    <!-- 配置Jdbc模板 -->
    <beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate">
        <propertyname="dataSource"ref="dataSource"></property>
    </bean>
 
    <!-- 配置事务管理器 -->
    <beanid="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
        p:dataSource-ref="dataSource"/>
 
    <!-- 通过AOP配置提供事务增强,让service包下所有Bean的所有方法拥有事务 -->
    <aop:configproxy-target-class="true">
        <aop:pointcutid="serviceMethod"
            expression=" execution(* com.service..*(..))"/>
        <aop:advisorpointcut-ref="serviceMethod"advice-ref="txAdvice"/>
    </aop:config>
    <tx:adviceid="txAdvice"transaction-manager="transactionManager">
        <tx:attributes>
            <tx:methodname="*"/>
        </tx:attributes>
    </tx:advice>
 
    <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
    <bean
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
     
     
    <!-- 配置视图解析器,将ModelAndView及字符串解析为具体的页面 -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        p:viewClass="org.springframework.web.servlet.view.JstlView"p:prefix="/WEB-INF/jsp/"
        p:suffix=".jsp"/>
 
</beans>

3)jdbc.properties的配置:

?
1
2
3
4
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test2
jdbc.username=root
jdbc.password=123456

4)log4j.properties的配置:

?
1
2
3
4
5
log4j.rootLogger=DEBUG,A1
# \u8f93\u51fa\u5230\u63a7\u5236\u53f0
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [\u65E5\u5FD7\u4FE1\u606F] %m%n

 5)User.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package com.model;
 
import java.io.Serializable;
 
@SuppressWarnings("serial")
public class User implementsSerializable {
     
    privateint id;
    privateString userName;
    privateString password;
     
    publicString getUserName() {
        returnuserName;
    }
    publicvoid setUserName(String userName) {
        this.userName = userName;
    }
    publicString getPassword() {
        returnpassword;
    }
    publicvoid setPassword(String password) {
        this.password = password;
    }
    publicint getId() {
        returnid;
    }
    publicvoid setId(intid) {
        this.id = id;
    }
     
 
}

6)UserController.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package com.controller;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
 
import com.model.User;
import com.service.UserService;
 
@Controller
public class UserComtroller {
     
    @Autowired
    privateUserService userService;
     
    @RequestMapping("/user/loginView")
    publicString loginView(){
        return"login";
    }
     
    @RequestMapping("/user/registerView")
    publicString registerView(){
        return"register";
    }
     
    @RequestMapping("/user/login")
    publicModelAndView login(User user){
        ModelAndView mav =new ModelAndView();
        User u = userService.loginCheck(user);
        if(null==u){
            mav.setViewName("login");
            mav.addObject("errorMsg","用户名或密码有误!");
            returnmav;
        }
        else{
            mav.setViewName("success");
            mav.addObject("user", u);
            returnmav;
        }
    }
     
    @RequestMapping("/user/register")
    publicModelAndView register(User user){
        ModelAndView mav =new ModelAndView();
        if(userService.register(user)){
            mav.setViewName("register_succ");
            returnmav;
        }
        else{
            mav.setViewName("register");
            mav.addObject("errorMsg","用户名已被占用,请更换!!");
            returnmav;
        }
    }
}

7)UserService Interface

?
1
2
3
4
5
6
7
8
9
package com.service;
 
import com.model.User;
 
 
public interface UserService {
    publicboolean register(User user);
    publicUser loginCheck(User user);
}

8)UserServiceImp.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.service.implement;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import com.dao.UserDao;
import com.model.User;
import com.service.UserService;
 
@Service
public class UserServiceImpl implementsUserService {
 
    @Autowired
    privateUserDao userDao;
     
    @Override
    publicUser loginCheck(User user) {
        User u  = userDao.findUserByUserName(user.getUserName());
        System.out.println("id="+u.getId()+",  userName="+u.getUserName()+", password="+u.getPassword());
        if(user.getPassword().equals(u.getPassword())){
            returnu;
        }
        else{
            returnnull;
        }
    }
 
    @Override
    publicboolean register(User user) {
        User u =  userDao.findUserByUserName(user.getUserName());
        if(u.getId()==0){
            userDao.register(user);
            returntrue;
        }
        else{
            System.out.println("id="+u.getId()+",  userName="+u.getUserName()+", password="+u.getPassword());
            returnfalse;
        }
    }
 
}

9)UserDao Interface

?
1
2
3
4
5
6
7
8
package com.dao;
 
import com.model.User;
 
public interface UserDao {
    publicvoid register(User user);
    publicUser findUserByUserName(finalString userName);
}

10)UserDaoImpl.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.dao.implement;
 
import java.sql.ResultSet;
import java.sql.SQLException;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.stereotype.Repository;
 
import com.dao.UserDao;
import com.model.User;
 
@Repository
public class UserDaoImpl implementsUserDao {
     
    @Autowired
    privateJdbcTemplate jdbcTemplate;
 
    @Override
    publicvoid register(User user) {
        String sqlStr ="insert into user(uname,pwd) values(?,?)";
        Object[] params =new Object[]{user.getUserName(),user.getPassword()};
        jdbcTemplate.update(sqlStr, params);
    }
 
    @Override
    publicUser findUserByUserName(String userName) {
        String sqlStr ="select id,uname,pwd from user where uname=?";
        finalUser user = newUser();
        jdbcTemplate.query(sqlStr,new Object[]{userName},new RowCallbackHandler() {
            @Override
            publicvoid processRow(ResultSet rs)throws SQLException {
                user.setId(rs.getInt("id"));
                user.setUserName(rs.getString("uname"));
                user.setPassword(rs.getString("pwd"));
            }
        });
        returnuser;
    }
 
}

11)单元测试:test/com.service.implement

-UserServiceImplTest.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.service.implement;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
import com.model.User;
import com.service.UserService;
 
 
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="/applicationContext.xml")
public class UserServiceTest {
     
    @Autowired
    privateUserService userService;
     
    @Test
    publicvoid testLoginCheck(){
        User user =new User();
        user.setUserName("manager2");
        user.setPassword("123");
        if(null!=userService.loginCheck(user))
            System.out.println("------OK!!-----");
        else
            System.out.println("------Sorry!!-----");
    }
     
    @Test
    publicvoid testRegister(){
        User user =new User();
        user.setUserName("manager");
        user.setPassword("123");
        System.out.println(userService.register(user));
    }
 
}

12)测试结果:

SpringMVC + Spring + SpringJDBC整合

SpringMVC + Spring + SpringJDBC整合


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝两岁清鼻涕咳嗽痰多怎么办 喉咙咸咸的有痰怎么办 宝宝咳嗽鼻塞喉咙有痰怎么办 绝地求生刺激战场射击键误触怎么办 在皮卡堂卡的游泳了怎么办 假如遇到老赖没能力还钱怎么办 服刑人拒不执行伤害赔偿怎么办? 面对当前严峻形势作为军人怎么办 想起诉不知道对方地址怎么办 遇见家里来嫌疑人员怎么办 老滚5老婆死了怎么办 美化包安装之后闪退怎么办 蕉下的伞坏了怎么办 苹果7通话音质特别差怎么办 雨伞的伞骨坏了怎么办 雨伞的铁丝掉了怎么办 手机银行验证码忘了怎么办 应用安装验证码忘了怎么办 大王卡激活码找不到了怎么办 信用卡的激活码找不到怎么办 育碧账号忘了怎么办 uplay八折券丢了怎么办 不小心按到了育碧解绑怎么办 台式电脑连不上网怎么办 重装系统也安装不了cad怎么办 染发灰色偏绿了怎么办 vgm数据填错了怎么办 克里格插值 不符合正态分布怎么办 克里金插值无效的输出范围怎么办 穿完臭袜子要洗手吗不洗怎么办 超敏c反应蛋白117怎么办 钢铁雄心4无模板怎么办 登录 新浪微博登录异常怎么办 微博授权失败怎么办qq uc微博授权失败怎么办 苹果手机无线网坏了怎么办 小米手机wife信号不好怎么办 微博出错了c403怎么办 微信客服没人接怎么办 安装包解析错误怎么办平板 苹果手机新浪免费邮箱用不了怎么办