springMVC项目完整流程详解
- 1.创建一个maven项目
- 2.修改项目配置,添加tomcat,生成web.xml
- 3.在pom.xml中引入需要用到的包并update project
- 4.在resources下建立如下图所示结构,并创建springmvc-servlet.xml、spring-mybatis.xml、druid.propterties和log4j.propteries
- 5.配置web.xml文件
- 6.建立项目的包结构
- 7.配置springmvc-servlet.xml和spring-mybatis.xml
- 8.依据数据库中的表创建实体类Car
- 9.创建ICarMapper接口
- 10.配置Car.mapper.xml
- 11.创建ICarService接口及实现类CarServiceImpl
- 12.创建异常类SSMException
- 13.创建HttpResp类
- 14.创建TestCarServiceImpl测试类
- 15.创建CarController
- 16.使用postman测试后端是否有bug
1.创建一个maven项目



此处项目报错是正常现象,将在下面步骤进行处理
2.修改项目配置,添加tomcat,生成web.xml




3.在pom.xml中引入需要用到的包并update project
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.yxx.ssm</groupId><artifactId>ssm</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><properties><project.lombok.version>1.18.16</project.lombok.version><project.spring.version>5.2.12.RELEASE</project.spring.version><project.junit.version>4.12</project.junit.version><project.mysql.version>8.0.22</project.mysql.version><project.druid.version>1.2.4</project.druid.version><project.mybatis.version>3.5.6</project.mybatis.version><project.mybatis-spring.version>2.0.6</project.mybatis-spring.version><project.slf4j-log4j12.version>1.7.30</project.slf4j-log4j12.version><project.jackson-databind.version>2.12.1</project.jackson-databind.version></properties><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${project.lombok.version}</version><scope>provided</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${project.spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${project.spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${project.spring.version}</version><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${project.junit.version}</version><scope>test</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${project.mysql.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${project.druid.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${project.mybatis.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${project.mybatis-spring.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${project.slf4j-log4j12.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${project.jackson-databind.version}</version></dependency></dependencies>
</project>

4.在resources下建立如下图所示结构,并创建springmvc-servlet.xml、spring-mybatis.xml、druid.propterties和log4j.propteries

druid.propterties(数据源配置信息)文件内容如下
druid.url=jdbc:mysql://192.168.120.128:3306/ssm-db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
druid.username=root
druid.password=root
log4j.propteries(日志配置信息)文件内容如下
log4j.rootLogger=debug,Console,Logfile#Console output
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} [%t] %rms (%-5p) [%c] -%l-- {%m}%nlog4j.appender.Logfile=org.apache.log4j.FileAppender
log4j.appender.Logfile.File=D:/logs/mybatis.log
log4j.appender.Logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.Logfile.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} [%t] %rms (%-5p) [%c] -%l-- {%m}%nlog4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
5.配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd" version="3.1"><display-name>ssm-basic</display-name><!--设置容器的配置文件位置--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/mybatis/spring-*.xml</param-value></context-param><!--通过listener启动IOC容器--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--通过过滤器解决中文乱码问题--><filter><filter-name>charsetEncoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class></filter><filter-mapping><filter-name>charsetEncoding</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--通过servlet启动springmvc容器--><servlet><servlet-name>springDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/mvc/springmvc-*.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><url-pattern>/*</url-pattern></servlet-mapping>
</web-app>
6.建立项目的包结构

7.配置springmvc-servlet.xml和spring-mybatis.xml
springmvc-servlet.xml文件如下
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"><!--配置注释扫描,并设置扫描范围(扫哪些包)--><context:component-scan base-package="com.yxx.ssm.controller"></context:component-scan><!--注解驱动--><mvc:annotation-driven/><!--访问static文件下的静态资源时,不予拦截--><mvc:resources location="static/" mapping="static/**"></mvc:resources></beans>
spring-mybatis.xml文件如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"><!-- 配置注解扫描,排除@Controller注释的类 --><context:component-scan base-package="com.yxx.ssm"><context:exclude-filter type="annotation" expression="import org.springframework.stereotype.Controller"/></context:component-scan><!-- 读取数据源配置信息 --><context:property-placeholder location="classpath:spring/mybatis/config/druid.properties" /><!-- 数据源对象 --><bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="url" value="${druid.url}" /><property name="username" value="${druid.username}" /><property name="password" value="${druid.password}" /></bean><!-- 配置数据库与实体类的映射 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="druidDataSource" /><property name="typeAliasesPackage" value="com.yxx.ssm.entity" /><!-- 别名 --><property name="mapperLocations" value="classpath:mapper/*.mapper.xml"></property></bean><!-- 绑定mybatis的操作接口 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.yxx.ssm.mapper" /><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property></bean><!-- 管理事务方式 --><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="druidDataSource"></property></bean><tx:annotation-driven transaction-manager="txManager" />
</beans>
8.依据数据库中的表创建实体类Car

package com.yxx.ssm.entity;import org.apache.ibatis.type.Alias;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Alias("Car")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Car {private Integer id;private String brand;private String color;private Double price;}
9.创建ICarMapper接口
package com.yxx.ssm.mapper;import java.util.List;import com.yxx.ssm.entity.Car;public interface ICarMapper {void save(Car car);void delete(int id);void update(Car car);List<Car> findAll();
}
10.配置Car.mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--配置表中字段与类属性的映射-->
<mapper namespace="com.yxx.ssm.mapper.ICarMapper"><resultMap type="Car" id="carMap"><id property="id" column="car_id" /><result property="brand" column="car_brand" /><result property="color" column="car_color" /><result property="price" column="car_price" /></resultMap><!--插入语句--><insert id="save">INSERT INTOcar_tab(car_brand,car_color,car_price)VALUES(#{brand},#{color},#{price})</insert>
<!--删除语句--><delete id="delete">DELETE FROM car_tab WHERE car_id=#{id}</delete>
<!--更新语句--><update id="update">UPDATE car_tab<set><if test="brand!=null">car_brand=#{brand},</if><if test="color!=null">car_color=#{color},</if><if test="price!=null">car_price=#{price},</if></set>WHERE car_id=#{id}</update>
<!--查询语句--><select id="findAll" resultMap="carMap">SELECT * FROM car_tab</select>
</mapper>
11.创建ICarService接口及实现类CarServiceImpl
package com.yxx.ssm.service;import java.util.List;import com.yxx.ssm.entity.Car;public interface ICarService {void addCar(Car car);void deleteCarById(int id);void updateCar(Car car);List<Car> findAll();
}
package com.yxx.ssm.service.impl;import java.util.List;import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.yxx.ssm.entity.Car;
import com.yxx.ssm.mapper.ICarMapper;
import com.yxx.ssm.service.ICarService;@Service
public class CarServiceImpl implements ICarService{@Autowiredprivate ICarMapper mapper;@Overridepublic void addCar(Car car) {mapper.save(car);}@Overridepublic void deleteCarById(int id) {mapper.delete(id);}@Overridepublic void updateCar(Car car) {mapper.update(car);}@Overridepublic List<Car> findAll() {return mapper.findAll();}}
12.创建异常类SSMException
package com.yxx.ssm.exception;public class SSMException extends RuntimeException {public SSMException(String msg) {super(msg);}
}
13.创建HttpResp类
package com.yxx.ssm.dto;import java.util.Date;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class HttpResp {private int code; //状态编号【自定义项目规则】private String msg; //编号含义private Object results; //返回的数据对象private Date time; //返回时间
}
14.创建TestCarServiceImpl测试类
package com.yxx.ssm.test;import static org.junit.Assert.*;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.yxx.ssm.entity.Car;
import com.yxx.ssm.service.ICarService;
@ContextConfiguration(locations = "classpath:spring/mybatis/spring-mybatis.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class TestCarServiceImpl {@Autowiredprivate ICarService ics;@Testpublic void testAddCar() {ics.addCar(new Car(null,"紫电","紫色",100000.00));}@Testpublic void testDeleteCarById() {ics.deleteCarById(3);}@Testpublic void testUpdateCar() {ics.updateCar(new Car(3,"卓越","蓝色",120000.00));}@Testpublic void testFindAll() {ics.findAll();}
}
insert测试结果


update测试结果


select测试结果

delete测试结果

15.创建CarController
package com.yxx.ssm.controller;import java.util.Date;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import com.yxx.ssm.dto.HttpResp;
import com.yxx.ssm.entity.Car;
import com.yxx.ssm.service.ICarService;@Controller
public class CarController {@Autowiredprivate ICarService ics;@PostMapping("/addCar")@ResponseBodypublic HttpResp addCar(Car car) {ics.addCar(car);return new HttpResp(20001,"添加汽车成功",null,new Date());}@DeleteMapping("/deleteCar")@ResponseBodypublic HttpResp deleteCar(int id) {ics.deleteCarById(id);return new HttpResp(20002,"删除汽车成功",null,new Date());}@PutMapping("/updateCar")@ResponseBodypublic HttpResp updateCarById(Car car) {ics.updateCar(car);return new HttpResp(2003,"修改汽车信息成功",null,new Date());}@GetMapping("/findAll")@ResponseBodypublic HttpResp findAll() {return new HttpResp(20004,"查询所有汽车成功",ics.findAll(),new Date());}
}
16.使用postman测试后端是否有bug
insert测试

update测试

select测试

delete测试

至此,以ssm为框架的一个简单项目的后台部分已经完成,前端部分博主会在之后进行制作,届时再更新












