✨✨博主简介:一个会bbox的👨💻
✨✨个人主页:沫洺的主页
📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏
💖💖如果文章对你有所帮助请留下三连✨✨
🎨搭建案例环境
📌创建数据库db5,表user_email
📌创建maven Web项目,pom.xml添加坐标依赖,配置tomcat
📍pom.xml
<?xml version="1.0" encoding="UTF-8"?><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.beiyou</groupId><artifactId>cms-api</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>cms-api Maven Webapp</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><!--引入webmvc--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.5</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.10</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.0</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>5.3.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version><scope>runtime</scope></dependency><!--mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.2</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.12</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><!--端口号--><port>8080</port><!--虚拟目录--><path>/</path><!--解决tomcat7及以前get乱码--><uriEncoding>utf-8</uriEncoding></configuration></plugin></plugins><finalName>cms-api</finalName><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><artifactId>maven-clean-plugin</artifactId><version>3.1.0</version></plugin><!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.2.2</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin></plugins></pluginManagement></build> </project>
📌搭建SpringMVC运行环境
📍web.xml配置前端控制器DispatcherServlet
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--前端控制器--><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.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><url-pattern>/</url-pattern><!-- / 代表: 所有请求都交给springDispatcherServlet处理--></servlet-mapping></web-app>
📍resources下创建spring.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation=" http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="com.moming"/><!--<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">--><!-- <property name="dataSource" ref="dataSource" />--><!-- <property name="mapperLocations" value="classpath:mapper/**.xml" />--><!-- <property name="typeAliasesPackage" value="com.moming.entity"/>--><!--</bean>--><!--<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">--><!-- <property name="basePackage" value="com.moming.dao" />--><!-- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />--><!--</bean>--> </beans>
📍java下新建com/moming/config/WebConfig
package com.moming.config;import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import java.nio.charset.StandardCharsets; import java.util.List;/*** mvc配置文件*/ @Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer {@Overridepublic void extendMessageConverters(List<HttpMessageConverter<?>> converters) {for (HttpMessageConverter<?> converter:converters){if(converter instanceof StringHttpMessageConverter){((StringHttpMessageConverter)converter).setDefaultCharset(StandardCharsets.UTF_8);}if(converter instanceof MappingJackson2HttpMessageConverter){((MappingJackson2HttpMessageConverter)converter).setDefaultCharset(StandardCharsets.UTF_8);}}} }
📌配置MyBatis
📍在resources下创建druid.properties
username=root password=123456 url=jdbc:mysql:///db5?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowMultiQueries=true driverClassName=com.mysql.cj.jdbc.Driver initialSize=5 maxActive=10 maxWait=3000
📍创建config/DbConfig
package com.moming.config;import com.alibaba.druid.pool.DruidDataSourceFactory; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.support.TransactionTemplate;import javax.sql.DataSource; import java.io.InputStream; import java.util.Properties;/*** 数据库配置文件*/ @Configuration @MapperScan("com.moming.dao") public class DbConfig {/*** 手动注册 Druid dataSource 数据源* @return DataSource*/@Beanpublic DataSource dataSource() throws Exception {InputStream resourceAsStream = DbConfig.class.getClassLoader().getResourceAsStream("druid.properties");Properties prop = new Properties();prop.load(resourceAsStream);DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);return dataSource;}/*** 手动注册 JdbcTemplate* @return JdbcTemplate*/@Beanpublic JdbcTemplate jdbcTemplate(DataSource dataSource){JdbcTemplate jdbcTemplate = new JdbcTemplate();jdbcTemplate.setDataSource(dataSource);return jdbcTemplate;}/*** 事务管理器* @param dataSource* @return*/@Beanpublic DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource){DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();transactionManager.setDataSource(dataSource);return transactionManager;}/*** 事务模板* @param dataSourceTransactionManager* @return*/@Beanpublic TransactionTemplate transactionTemplate(DataSourceTransactionManager dataSourceTransactionManager){TransactionTemplate transactionTemplate = new TransactionTemplate(dataSourceTransactionManager);//transactionTemplate.setTransactionManager(dataSourceTransactionManager);return transactionTemplate;}/*** SqlSessionFactory* @param* @return*/@Beanpublic SqlSessionFactory sqlSessionFactory() throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource());ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();Resource[] resources = resolver.getResources("classpath:mapper/**.xml");sqlSessionFactoryBean.setMapperLocations(resources);sqlSessionFactoryBean.setTypeAliasesPackage("com.moming.entity");return sqlSessionFactoryBean.getObject();} }
📍在resources下创建mapper/user.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.moming.dao.UserDao"></mapper>
📍创建com/moming/entity/UserEntity实体类
package com.moming.entity;import lombok.Data;/*** 对应数据表的实体类*/ @Data public class UserEntity {private Integer id;private String email;private String password; }
📍创建com/moming/entity/UserEntityQuery查询参数类
package com.moming.entity;import lombok.Data;/*** 查询参数类*/ @Data public class UserEntityQuery {private Integer id;private String email;private Integer[] ids; }
📌创建拦截器对响应数据进行协议包装
📍com/moming/advice/MyResponseAdvice
package com.moming.advice;import cn.hutool.json.JSONUtil; import com.moming.dto.ResponseDto; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;/*** 拦截器*/ @ControllerAdvice @ResponseBody public class MyResponseAdvice implements ResponseBodyAdvice<Object> {@ExceptionHandler(Exception.class)public Object processException(Exception ex){ResponseDto responseDto = new ResponseDto();responseDto.setCode(1);responseDto.setMessage(ex.getMessage());return responseDto;}@Overridepublic boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {return true;}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {if(body instanceof ResponseDto){return body;}ResponseDto responseDto = new ResponseDto();responseDto.setCode(0);responseDto.setMessage("请求成功");responseDto.setData(body);if (selectedConverterType == StringHttpMessageConverter.class) {return JSONUtil.toJsonStr(responseDto);} else {return responseDto;}} }
📍创建com/moming/dto/ResponseDto数据传输类
package com.moming.dto;import lombok.Data;/*** 数据传输对象*/ @Data public class ResponseDto {private int code;private String message;private Object data; }
📌SpringMVC
📍数据访问层
创建com/moming/dao/UserDao
package com.moming.dao;import com.moming.entity.UserEntity; import com.moming.entity.UserEntityQuery; import org.apache.ibatis.annotations.*; import org.springframework.stereotype.Repository;import java.util.List;/*** 数据访问层*/ //@Repository @Mapper public interface UserDao {/*** 查* @param query* @return*/@Select("select * from user_email where id=#{id}")List<UserEntity> select(UserEntityQuery query);/*** 增* @param userEntity* @return*/@Insert("insert into user_email (email,password) values (#{email},#{password})")@SelectKey(statement = "select LAST_INSERT_ID() as id", keyProperty = "id", keyColumn = "id", before = false, resultType = Integer.class)int insert(UserEntity userEntity);/*** 改* @param userEntity* @return*/@Update("update user_email set email=#{email},password=#{password} where id=#{id} ")int update(UserEntity userEntity);/*** 删* @param id* @return*/@Delete("delete from user_email where id=#{id}")int delete(int id); }
📍业务层
创建com/moming/service/UserService
package com.moming.service;import com.moming.dao.UserDao; import com.moming.entity.UserEntity; import com.moming.entity.UserEntityQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List;/*** 业务层*/ @Service public class UserService {@Autowiredprivate UserDao userDao;/*** 查* @param id* @return*/public List<UserEntity> select(int id){UserEntityQuery query = new UserEntityQuery();query.setId(id);return userDao.select(query);}/*** 增* @param userEntity* @return*/public int insert(UserEntity userEntity){return userDao.insert(userEntity);}/*** 改* @param userEntity* @return*/public int update(UserEntity userEntity){return userDao.update(userEntity);}/*** 删* @param id* @return*/public int delete(int id){return userDao.delete(id);} }
📍接口层
创建com/moming/controller/UserController
package com.moming.controller;import com.moming.entity.UserEntity; import com.moming.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;import java.util.List;/*** 接口层*/ @RestController public class UserController {@Autowiredprivate UserService userService;/*** 查* @param id* @return*/@GetMapping("/select")public List<UserEntity> select(@RequestParam("id") int id){return userService.select(id);}/*** 增* @param userEntity* @return*/@PostMapping("/insert")public int insert(@RequestBody UserEntity userEntity){int rowNum = userService.insert(userEntity);return rowNum;}/*** 改* @param userEntity* @return*/@PutMapping("/update")public int update(@RequestBody UserEntity userEntity){return userService.update(userEntity);}/*** 删* @param id* @return*/@GetMapping("/delete")public int delete(@RequestParam("id") int id){return userService.delete(id);}}
🎨使用插件模拟前端向后端发送请求体
💦模拟查询
🎏注意get不识别请求体,可以通过url传参
🎏运行发送请求体
💦模拟添加
🎏运行发送请求体
💦模拟修改
🎏运行发送请求体
💦模拟删除
🎏运行发送请求体