项目初始化
git
git init
git config user.name "Zwww"
git config user.email "zv041118@163.com"
git remote add origin git@git.acwing.com:Zwww/zwww_blog.git
git status
git add .
git status
git commit -m "项目搭建 后端初始化"
git push -u origin master
后端初始化
SpringBoot
jdk8 SpringBoot2.7.6
Database
mysql:
create database Zwww_blog;
use zwww_blog
yml:
server:
port: 8124
servlet:
context-path: /api
spring:
application:
name: Zwww-blog-backend
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/zwww_blog?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: zw200495
整合依赖
Pom
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zwnsyw</groupId>
<artifactId>Zwww-blog-backend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Zwww-blog-backend</name>
<description>Zwww-blog-backend</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.7.6</spring-boot.version>
</properties>
<dependencies>
<!-- - - - - - - - - SpringBoot Base - - - - - - - - - -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- AOP 切面 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- - - - - - - - - - - Database - - - - - - - - - - - - -->
<!-- MyBatis Plus (需移除MyBatis) -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.9</version>
</dependency>
<!-- MyBatis Plus 分页插件 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-jsqlparser-4.9</artifactId>
</dependency>
<!-- mysql 连接 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- - - - - - - - - - - 注解处理 - - - - - - - - - - - - -->
<!-- 样板代码注解 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- dto校验注解 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<!-- - - - - - - - - - - utools - - - - - - - - - - - - -->
<!-- hutool工具箱 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.26</version>
</dependency>
<!-- Apache commons 工具箱 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<!-- swagger 接口文档 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-bom</artifactId>
<version>3.5.9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.zwnsyw.zwwwblogbackend.ZwwwBlogBackendApplication</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
MVC层级
src
└── main
└── java
└── com.zwnsyw.zwwwblogbackend
├── controller
│ └── UserController.java
├── service
│ └── impl
│ └── UserServiceimpl.java
│ └── UserService.java
├── mapper
│ └── UserMapper.java
├── entity
│ └── UserEntity.java
├── dto
│ └── UserRegisterDTO.java
├── vo
│ └── UserVO.java
├── enums
│ └── UserTypeEnum.java
├── config
│ └── MyBatisPlusConfig.java
├── utils
│ └── BeanCopyUtil.java
├── exception
│ └── BusinessException.java
├── task
└── DataCleanupTask.java
mapper层 配置mybatis-plus
扫描mapper包 由mybatis-plus自动处理 添加MyBatisPlusConfig
package com.zwnsyw.zwwwblogbackend.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.zwnsyw.zwwwblogbackend.mapper")
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
application.yml 中追加配置
开启日志 、逻辑删除
mybatis-plus:
configuration:
map-underscore-to-camel-case: false # 不自动下划线转驼峰 手动统一命名为全驼峰
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 仅在开发环境开启日志(会输出拼接的sql语句方便调试)
default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler # 解决@EnumValue不生效
global-config:
db-config:
logic-delete-field: isDelete # 全局逻辑删除的实体字段名
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
controller层 配置swagger
application.yml 中追加接口文档配置,扫描 Controller 包:
# 接口文档配置
knife4j:
enable: true
openapi:
title: "接口文档"
version: 1.0
group:
default:
api-rule: package
api-rule-resources:
- com.zwnsyw.zwwwblogbackend.controller
启动类配置启动AOP
exposeProxy = true 的:通过 Spring AOP 提供对当前代理对象的访问,使得可以在业务逻辑中访问到当前的代理对象。
可以在方法执行时通过 AopContext.currentProxy() 获取当前的代理对象
package com.zwnsyw.zwwwblogbackend;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@SpringBootApplication
@EnableAspectJAutoProxy(exposeProxy = true)
public class ZwwwBlogBackendApplication {
public static void main(String[] args) {
SpringApplication.run(ZwwwBlogBackendApplication.class, args);
}
}
全局跨域配置
package com.zwnsyw.zwwwblogbackend.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowCredentials(true)
.allowedOriginPatterns("http://localhost:5173", "http://127.0.0.1:5173")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("Content-Type", "Authorization")
.exposedHeaders("X-Total-Count")
.maxAge(3600);
}
}
通用基础代码
自定义异常 响应包装 全局异常处理 请求包装 直接把两个写好的包复制进来即可
💬 评论