SSM框架整合(使用mybatis注解的方式)

 

SSM框架中的配置文件繁杂,此文帮大家疏通一下整体流程!

一 环境准备

1.1 创建maven工程

如图所示:

 

 

输入一下信息:

groupId:组织名称

artifactId:项目名称

便可进入项目中

1.2添加本次项目需要的jar包

jar包版本号

<spring.version>5.0.2.RELEASE</spring.version>
<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.12</log4j.version>
<shiro.version>1.2.3</shiro.version>
<mysql.version>5.1.6</mysql.version>
<mybatis.version>3.4.5</mybatis.version>

对应的说明(坐标文件)

  1     <dependency>
  2       <groupId>junit</groupId>
  3       <artifactId>junit</artifactId>
  4       <version>4.11</version>
  5       <scope>test</scope>
  6     </dependency>
  7 
  8     <!-- spring -->
  9     <dependency>
 10       <groupId>org.aspectj</groupId>
 11       <artifactId>aspectjweaver</artifactId>
 12       <version>1.6.8</version>
 13     </dependency>
 14 
 15     <dependency>
 16       <groupId>org.springframework</groupId>
 17       <artifactId>spring-aop</artifactId>
 18       <version>${spring.version}</version>
 19     </dependency>
 20 
 21     <dependency>
 22       <groupId>org.springframework</groupId>
 23       <artifactId>spring-context</artifactId>
 24       <version>${spring.version}</version>
 25     </dependency>
 26 
 27     <dependency>
 28       <groupId>org.springframework</groupId>
 29       <artifactId>spring-web</artifactId>
 30       <version>${spring.version}</version>
 31     </dependency>
 32 
 33     <dependency>
 34       <groupId>org.springframework</groupId>
 35       <artifactId>spring-webmvc</artifactId>
 36       <version>${spring.version}</version>
 37     </dependency>
 38 
 39     <dependency>
 40       <groupId>org.springframework</groupId>
 41       <artifactId>spring-test</artifactId>
 42       <version>${spring.version}</version>
 43     </dependency>
 44 
 45     <dependency>
 46       <groupId>org.springframework</groupId>
 47       <artifactId>spring-tx</artifactId>
 48       <version>${spring.version}</version>
 49     </dependency>
 50 
 51     <dependency>
 52       <groupId>org.springframework</groupId>
 53       <artifactId>spring-jdbc</artifactId>
 54       <version>${spring.version}</version>
 55     </dependency>
 56 
 57     <dependency>
 58       <groupId>junit</groupId>
 59       <artifactId>junit</artifactId>
 60       <version>4.12</version>
 61       <scope>test</scope>
 62     </dependency>
 63 
 64     <dependency>
 65       <groupId>mysql</groupId>
 66       <artifactId>mysql-connector-java</artifactId>
 67       <version>${mysql.version}</version>
 68     </dependency>
 69 
 70     <dependency>
 71       <groupId>javax.servlet</groupId>
 72       <artifactId>servlet-api</artifactId>
 73       <version>2.5</version>
 74       <scope>provided</scope>
 75     </dependency>
 76 
 77     <dependency>
 78       <groupId>javax.servlet.jsp</groupId>
 79       <artifactId>jsp-api</artifactId>
 80       <version>2.0</version>
 81       <scope>provided</scope>
 82     </dependency>
 83 
 84     <dependency>
 85       <groupId>jstl</groupId>
 86       <artifactId>jstl</artifactId>
 87       <version>1.2</version>
 88     </dependency>
 89 
 90     <!-- log start -->
 91     <dependency>
 92       <groupId>log4j</groupId>
 93       <artifactId>log4j</artifactId>
 94       <version>${log4j.version}</version>
 95     </dependency>
 96 
 97     <dependency>
 98       <groupId>org.slf4j</groupId>
 99       <artifactId>slf4j-api</artifactId>
100       <version>${slf4j.version}</version>
101     </dependency>
102 
103     <dependency>
104       <groupId>org.slf4j</groupId>
105       <artifactId>slf4j-log4j12</artifactId>
106       <version>${slf4j.version}</version>
107     </dependency>
108     <!-- log end -->
109     <dependency>
110       <groupId>org.mybatis</groupId>
111       <artifactId>mybatis</artifactId>
112       <version>${mybatis.version}</version>
113     </dependency>
114 
115     <dependency>
116       <groupId>org.mybatis</groupId>
117       <artifactId>mybatis-spring</artifactId>
118       <version>1.3.0</version>
119     </dependency>
120 
121     <dependency>
122       <groupId>c3p0</groupId>
123       <artifactId>c3p0</artifactId>
124       <version>0.9.1.2</version>
125       <type>jar</type>
126       <scope>compile</scope>
127     </dependency>
128     <dependency>
129       <groupId>org.junit.jupiter</groupId>
130       <artifactId>junit-jupiter-api</artifactId>
131       <version>RELEASE</version>
132       <scope>compile</scope>
133     </dependency>
134     <dependency>
135       <groupId>org.junit.jupiter</groupId>
136       <artifactId>junit-jupiter-api</artifactId>
137       <version>RELEASE</version>
138       <scope>compile</scope>
139     </dependency>

1.3 标记文件夹

 

 需要注意,要用IDEA中的mark as将文件夹分别标注为源代码和配置文件

1.4 编写实体类

 1 public class User {
 2     private int id;
 3     private String username;
 4     private Date birthday;
 5     private String sex;
 6     private String address;
 7 
 8     public int getId() {
 9         return id;
10     }
11 
12     public void setId(int id) {
13         this.id = id;
14     }
15 
16     public String getUsername() {
17         return username;
18     }
19 
20     public void setUsername(String username) {
21         this.username = username;
22     }
23 
24     public Date getBirthday() {
25         return birthday;
26     }
27 
28     public void setBirthday(Date birthday) {
29         this.birthday = birthday;
30     }
31 
32     public String getSex() {
33         return sex;
34     }
35 
36     public void setSex(String sex) {
37         this.sex = sex;
38     }
39 
40     public String getAddress() {
41         return address;
42     }
43 
44     public void setAddress(String address) {
45         this.address = address;
46     }
47 
48     @Override
49     public String toString() {
50         return "User{" +
51                 "id=" + id +
52                 ", username='" + username + '\'' +
53                 ", birthday=" + birthday +
54                 ", sex='" + sex + '\'' +
55                 ", address='" + address + '\'' +
56                 '}';
57     }
58 }

1.5 编写业务层接口和持久层接口

持久层接口

1 public interface IUserDao {
2     public List<User> findAll();
3 }

业务层接口

1 public interface IUserService {
2     public List<User> findAll();
3 }

二、Spring框架

2.1 编写spring配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:aop="http://www.springframework.org/schema/aop"
 5        xmlns:tx="http://www.springframework.org/schema/tx"
 6        xmlns:context="http://www.springframework.org/schema/context"
 7        xsi:schemaLocation="http://www.springframework.org/schema/beans
 8         http://www.springframework.org/schema/beans/spring-beans.xsd
 9         http://www.springframework.org/schema/tx
10         http://www.springframework.org/schema/tx/spring-tx.xsd
11         http://www.springframework.org/schema/aop
12         http://www.springframework.org/schema/aop/spring-aop.xsd
13         http://www.springframework.org/schema/context
14         http://www.springframework.org/schema/context/spring-context.xsd">
15     <!-- 配置 spring 创建容器时要扫描的包  -->
16     <context:component-scan base-package="com.justnow">
17         <!--制定扫包规则,不扫描@Controller 注解的 JAVA 类,其他的还是要扫描 -->
18         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
19     </context:component-scan>
20 </beans>

使用componet-scan,可以让Spring自动识别哪些类需要被装配程Bean,从而减少在xml中的配置

2.2 使用注解配置业务层和持久层

此时,需要实现类,实现注解配置

 

 其中持久层

 1 import java.util.List;
 2 
 3 @Repository("userDao")
 4 public class UserDaoImpl implements IUserDao {
 5     @Override
 6     public List<User> findAll() {
 7         System.out.println("查询了所有账户");
 8         return null;
 9     }
10 }

业务层

 1 @Service("userService")
 2 public class UserService implements IUserService {
 3 
 4     @Autowired
 5     private IUserDao userDao;
 6 
 7     @Override
 8     public List<User> findAll() {
 9         return userDao.findAll();
10     }
11 }

因为我们使用的是自动检测Bean的方式,所以要明确知道哪些类需要注册为spring Bean。此时,需要使用构造性(stereotype)来注解所标注的类

@Component:把资源让spring来管理,相当于在xml中配置了一个Bean

@Controller:一般用于表现层的注解

@Service:一般用于业务层的注解

@Repository:一般用于持久层的注解

后面三个是第一个的衍生注解,与@Commponent作用和属性是都一样,只不过是提供了更加明确的使用场景。

注解的value指定了Bean的id。如@Service("userService"),可以表示将该类注册为Bean,其中id为userService。如果没有指定value的话,该Bean的id为类名第一个字母小写

@Autowired:当Spring发现@Autowired注解时,将自动在代码上下文中找到与其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方去。

 

2.3 测试spring能否独立运行

1 public class Test01Spring {
2     public static void main(String[] args) {
3         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
4         IUserService userService = (IUserService) context.getBean("userService");
5         userService.findAll();
6     }
7 }

拿到配置文件,根据id值实例化类,执行findAll方法

执行的结果为:

说明,上述的配置过程无问题!

 

 三、配置SpringMvc框架

3.1 在web.xml中配置核心控制器(DIspatcherServlet)

 

 

① 配置spring mvc的核心控制器

② 解决中文乱码过滤器

③ 默认访问的文件

 代码如下:

 1   <!-- 1、配置 spring mvc 的核心控制器 -->
 2   <servlet>
 3     <servlet-name>springmvcDispatcherServlet</servlet-name>
 4     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 5     <!-- 配置初始化参数,用于读取 springmvc 的配置文件 -->
 6     <init-param>
 7       <param-name>contextConfigLocation</param-name>
 8       <param-value>classpath:spring-mvc.xml</param-value>
 9     </init-param>
10     <!-- 配置 servlet 的对象的创建时间点:应用加载时创建。取值只能是非 0 正整数,表示启动顺序 -->
11     <load-on-startup>1</load-on-startup>
12   </servlet>
13   <servlet-mapping>
14     <servlet-name>springmvcDispatcherServlet</servlet-name>
15     <url-pattern>/</url-pattern>
16   </servlet-mapping>
17 
18   <!-- 2、解决中文乱码过滤器 -->
19   <filter>
20     <filter-name>characterEncodingFilter</filter-name>
21     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
22     <!--设置过滤中的属性值-->
23     <init-param>
24       <param-name>encoding</param-name>
25       <param-value>UTF-8</param-value>
26     </init-param>
27     <!--启动过滤器-->
28   </filter>
29   <!--过滤所有请求-->
30   <filter-mapping>
31     <filter-name>characterEncodingFilter</filter-name>
32     <url-pattern>/*</url-pattern>
33   </filter-mapping>
34 
35   <!--3、默认的访问文件-->
36   <welcome-file-list>
37     <welcome-file>index.html</welcome-file>
38     <welcome-file>index.htm</welcome-file>
39     <welcome-file>index.jsp</welcome-file>
40     <welcome-file>default.html</welcome-file>
41     <welcome-file>default.htm</welcome-file>
42     <welcome-file>default.jsp</welcome-file>
43   </welcome-file-list>

3.2 编写SpringMVC的配置文件spring-mvc.xml

 

 

① 扫描controller的注解,别的不扫描

② 配置视图解析器

③ 开启对SpringMVC注解的支持

 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:mvc="http://www.springframework.org/schema/mvc"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 6        xmlns:aop="http://www.springframework.org/schema/aop"
 7        xsi:schemaLocation="
 8            http://www.springframework.org/schema/beans
 9            http://www.springframework.org/schema/beans/spring-beans.xsd
10            http://www.springframework.org/schema/mvc
11            http://www.springframework.org/schema/mvc/spring-mvc.xsd
12            http://www.springframework.org/schema/context
13            http://www.springframework.org/schema/context/spring-context.xsd
14            http://www.springframework.org/schema/aop
15         http://www.springframework.org/schema/aop/spring-aop.xsd
16            ">
17 
18     <!-- 1、扫描controller的注解,别的不扫描 -->
19     <context:component-scan base-package="com.justnow.controller">
20     </context:component-scan>
21 
22     <!-- 2、配置视图解析器 -->
23     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
24         <!-- JSP文件所在的目录 -->
25         <property name="prefix" value="/pages/" />
26         <!-- 文件的后缀名 -->
27         <property name="suffix" value=".jsp" />
28     </bean>
29 
30     <!--3、开启对SpringMVC注解的支持 -->
31     <mvc:annotation-driven />
32 
33 
34 </beans>

 

3.3 编写Controller和jsp视图,测试

此处并没有连接数据库,所以只是测试

创建UserController

 1 package com.justnow.controller;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 
 6 @Controller
 7 @RequestMapping("/user")
 8 public class UserController {
 9     @RequestMapping("/findAll")
10     public String findAll(){
11         System.out.println("测试通过");
12         return "userList";
13     }
14 }

当访问/user/findAll的时候,就会在控制台打印"测试通过"

修改index.jsp为

1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
2 <html>
3 <body>
4 <h2>Hello World!</h2>
5 <a href="${pageContext.request.contextPath}/user/findAll">click</a>
6 </body>
7 </html>

 

 最后的测试效果

 

四、整合Spring和SpringMVC

4.1 配置监听器实现启动服务创建容器

在web.xml中添加以下内容

 1   <!--配置spring提供的监听器,用于启动服务器时加载容器。该监听器只能加载WEB-INF目录中名称为applicationContext.xml的配置文件,所以需要手动指定spring配置文件的位置-->
 2   <listener>
 3     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 4   </listener>
 5 
 6   <!--手动指定spring配置文件位置-->
 7   <context-param>
 8     <param-name>contextConfigLocation</param-name>
 9     <param-value>classpath:applicationContext.xml</param-value>
10   </context-param>

五、使用Mybatis

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

 

 5.1 编写SqlMapConfig.xml的配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration
 3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <properties resource="jdbcConfig.properties"></properties>
 7     <environments default="mysql">
 8         <environment id="mysql">
 9             <transactionManager type="JDBC"></transactionManager>
10             <dataSource type="pooled">
11                 <property name="driver" value="${jdbc.driver}"/>
12                 <property name="url" value="${jdbc.url}"/>
13                 <property name="username" value="${jdbc.username}"/>
14                 <property name="password" value="${jdbc.password}"/>
15             </dataSource>
16         </environment>
17     </environments>
18     <mappers>
19         <!--该包下所有的dao接口-->
20         <package name="com.justnow.dao"/>
21     </mappers>
22 </configuration>

使用mybatis的注解配置,所以不需要再写对应接口的映射文件

5.2 在IUserDao接口的方法上添加注解,编写SQL语句

 1 package com.justnow.dao;
 2 
 3 import com.justnow.domain.User;
 4 import org.apache.ibatis.annotations.Select;
 5 
 6 import java.util.List;
 7 
 8 public interface IUserDao {
 9     @Select("select * from user")
10     public List<User> findAll();
11 }

5.3 写测试类,查看结果

强调,Resource类来自mybatis的包下,不要导错了

 1 package test;
 2 
 3 import com.justnow.dao.IUserDao;
 4 import com.justnow.domain.User;
 5 import org.apache.ibatis.io.Resources;
 6 import org.apache.ibatis.session.SqlSession;
 7 import org.apache.ibatis.session.SqlSessionFactory;
 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 9 import org.junit.jupiter.api.Test;
10 
11 import java.io.IOException;
12 import java.io.InputStream;
13 import java.util.List;
14 
15 
16 public class Test02Mybatis {
17     @Test
18     public void test() throws IOException {
19         //加载配置文件
20         InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
21         //创建工厂
22         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
23         //创建sqlSession对象
24         SqlSession session = factory.openSession();
25         //获取代理对象
26         IUserDao dao = session.getMapper(IUserDao.class);
27         //调用查询的方法
28         List<User> list = dao.findAll();
29         for (User user : list) {
30             System.out.println(user);
31         }
32         //释放资源
33         session.close();
34         inputStream.close();
35     }
36 }

查看测试结果

 

六 Spring整合Mybatis框架

6.1 SqlMapConfig.xm配置文件的内容配置到applicationContext.xml中

注意:配置完成后,直接删除SqlMapConfig.xml。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:aop="http://www.springframework.org/schema/aop"
 5        xmlns:tx="http://www.springframework.org/schema/tx"
 6        xmlns:context="http://www.springframework.org/schema/context"
 7        xsi:schemaLocation="http://www.springframework.org/schema/beans
 8         http://www.springframework.org/schema/beans/spring-beans.xsd
 9         http://www.springframework.org/schema/tx
10         http://www.springframework.org/schema/tx/spring-tx.xsd
11         http://www.springframework.org/schema/aop
12         http://www.springframework.org/schema/aop/spring-aop.xsd
13         http://www.springframework.org/schema/context
14         http://www.springframework.org/schema/context/spring-context.xsd">
15     <!-- 配置 spring 创建容器时要扫描的包 -->
16     <context:component-scan base-package="com.justnow">
17         <!--制定扫包规则,不扫描@Controller 注解的 JAVA 类,其他的还是要扫描 -->
18         <context:exclude-filter type="annotation"
19                                 expression="org.springframework.stereotype.Controller" />
20     </context:component-scan>
21 
22     <!--加载配置文件-->
23     <context:property-placeholder location="classpath:jdbcConfig.properties" />
24 
25     <!--配置数据源-->
26     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
27         <property name="driverClass" value="${jdbc.driver}"></property>
28         <property name="jdbcUrl" value="${jdbc.url}"></property>
29         <property name="user" value="${jdbc.username}"></property>
30         <property name="password" value="${jdbc.password}"></property>
31     </bean>
32     <!--配置mybatis的Session工厂-->
33     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
34         <!--数据库连接池-->
35         <property name="dataSource" ref="dataSource"/>
36 
37         <!-- 扫描sql配置文件:mapper需要的xml文件 -->
38         <property name="mapperLocations" value="classpath:mapper/*.xml"/>
39     </bean>
40 
41     <!--配置扫描dao接口包,动态实现dao接口,注入到spring容器中-->
42     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
43         <!-- 注入sqlSessionFactory -->
44         <property name="basePackage" value="com.justnow.ssm.dao"/>
45     </bean>
46 
47 
48 </beans>

6.2 删除dao接口的实现类,并修改Controller

 1 package com.justnow.controller;
 2 
 3 import com.justnow.domain.User;
 4 import com.justnow.service.IUserService;
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.stereotype.Controller;
 7 import org.springframework.web.bind.annotation.RequestMapping;
 8 import org.springframework.web.servlet.ModelAndView;
 9 
10 import java.util.List;
11 
12 @Controller
13 @RequestMapping("/user")
14 public class UserController {
15     @Autowired
16     private IUserService userService;
17 
18     @RequestMapping("/findAll")
19     public ModelAndView findAll(){
20         ModelAndView mv = new ModelAndView();
21         List<User> userList = userService.findAll();
22         mv.addObject("userList", userList);
23         mv.setViewName("userList");
24         return mv;
25     }
26 }

6.3 修改jsp页面,读取服务器返回的参数

 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 2 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 3 <html>
 4 <head>
 5     <title>title</title>
 6 </head>
 7 <body>
 8     我是userList界面
 9     展示user信息
10     <table border="1px">
11         <tr>
12             <th>id</th>
13             <th>username</th>
14             <th>birthday</th>
15             <th>sex</th>
16             <th>address</th>
17         </tr>
18 
19             <c:forEach items="${userList}" var="user">
20                 <tr>
21                     <td>${user.id}</td>
22                     <td>${user.username}</td>
23                     <td>${user.birthday}</td>
24                     <td>${user.sex}</td>
25                     <td>${user.address}</td>
26                 </tr>
27             </c:forEach>
28 
29     </table>
30 </body>
31 </html>

6.4 访问后的结果为:

 

七 Spring 配置注解事务

7.1 配置注解事务

如果不同的用户同时插入数据,那么这时候就需要事务来处理问题。在applicationContenxt.xml中配置用注解的方法来设置事务的相关属性

1     <!--3 配置Spring的声明式事务管理 -->
2     <!--3.1 配置事务管理器 -->
3     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
4         <property name="dataSource" ref="dataSource"/>
5     </bean>
6 
7     <!--3.2 事务驱动注解-->
8     <tx:annotation-driven transaction-manager="transactionManager"/>

同时在service的实现类中添加@Transactional

 

这里使用的默认的事务属性,找到注解的源代码

7.2 添加jsp页面、修改controller、service、dao代码

userInsert.jsp

 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 2 <html>
 3 <head>
 4     <title>title</title>
 5 </head>
 6 <body>
 7 
 8 <form action="${pageContext.request.contextPath}/user/save" method="post">
 9     id<input type="text" name="id">
10     username<input type="text" name="username"><br>
11     birthday<input type="date" name="birthday"><br>
12     sex<input type="text" name="sex"><br>
13     address<input type="text" name="address"><br>
14     <input type="submit" value="提交">
15 </form>
16 </body>
17 </html>

在dao中添加插入方法

package com.justnow.dao;

import com.justnow.domain.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;


public interface IUserDao {
    @Select("select * from user")
    public List<User> findAll();

    @Insert("insert into user(id, username, birthday, sex, address) values (#{id}, #{username}, #{birthday}, #{sex}, #{address})")
    public void save(User user);
}

在service中添加插入方法

 

 在controller中添加两个映射,一个跳转到userInsert.jsp页面,一个是form表单中提交后,重定向到用户列表页面userList.jsp中

 

 

 注意:因为提交中参数出现了日期,所以必须在实体类中确定日期的格式。用注解的方法实现

 

 现在开始测试,

第一步:打开user/add,并填入内容

第二步:查看是否插入成功

 

ok!,搞定

 附上本次项目源代码:

https://github.com/justn0w/javawebdemo/tree/master/ssmdemo

 

 

 

 

 

   

posted @ 2019-08-21 20:54  justn0w  阅读(4526)  评论(0编辑  收藏  举报