Tabla de contenido
3.2 Crear un proyecto principal: zx_parent_practise
3.3: Crear un subproyecto: zx_common_practise
3.4: Crear subproyecto: zx_domain_practise
3.5: Crear un subproyecto: zx_geteway
3.6: Crear un subproyecto: zx_service_teacher
4. Trabajo preliminar del módulo docente:
4.5: Copiar clase de configuración
5. Función: borrado lógico de profesores
5.1: método de eliminación lógica del controlador
5.3: Configurar controlador: realizar procesamiento de mensajes asíncrono
5.4: Configurar el archivo application.yml
5.5: Probar el método en swagger
6. Función: consulta condicional y paginación
7. Función: agregar maestro, modificar maestro
7.1: Agregar clase de configuración: complete agregar y modificar tiempo
8. Funciones: eliminar profesores, consultar profesores, eliminar profesores en lotes
1. Proyecto en línea Chuanzhi
1.1 Introducción a la función
-
¿Qué módulo haces?
-
Todo el proyecto se divide en dos partes: la parte delantera y la parte trasera.
-
Parte frontal: es la parte para que los usuarios compren y estudien videos.
-
Parte de fondo: Para la parte de gestión y operación, se realiza la carga de videos y el mantenimiento.
-
Este curso está casi completo
后台部分
.
-
-
¿Qué tecnología se utiliza?
-
Backend: SpringCloud alibaba core componente Nacos+SSM+mybatis-plus+swagger-ui+POI+Redis + JavaMail +RabbitMQ+EasyExcel.....
-
Front-end: Tina para toda la familia Vue: Vue+Vue-Router+Vuex+SPA + element ui admin
-
1.2 Módulos del sistema
1.3 Arquitectura del sistema
-
Desarrollo de separación front-end y back-end:
-
desacoplamiento
-
¡El backend y el frontend están completamente separados, y la interfaz del backend puede ser utilizada por múltiples extremos! (APP, WeChat, PC, WAP) (La interfaz de estilo tranquilo puede ser utilizada por cualquier aplicación)
-
2. Diseño de base de datos
2.1 Base de datos
zx_edu_course: biblioteca relacionada con el curso
zx_edu_teacher: biblioteca relacionada con la sección de profesores
zx_edu_user: biblioteca relacionada con el usuario de inicio de sesión
zx_edu_vod: biblioteca relacionada con videos
2.2 Hoja de datos
Este capítulo registra principalmente el aprendizaje: la adición, eliminación, modificación y consulta del backend del profesor (esta tabla se utiliza)
3. Crea un proyecto
3.1 Arquitectura del proyecto
Diagrama de estructura del proyecto:
3.2 Crear un proyecto principal: zx_parent_practise
Importar dependencias en 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.czxy.zx</groupId>
<artifactId>zx_parent_practise</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>zx_common_practise</module>
<module>zx_domain_practise</module>
<module>zx_gateway</module>
<module>zx_service_teacher</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring-cloud-release.version>Hoxton.SR3</spring-cloud-release.version>
<nacos.version>1.1.0</nacos.version>
<alibaba.cloud.version>2.2.1.RELEASE</alibaba.cloud.version>
<mysql.version>5.1.32</mysql.version>
<mybatis.plus.version>3.4.0</mybatis.plus.version>
<druid.starter.version>1.1.9</druid.starter.version>
<jwt.jjwt.version>0.9.0</jwt.jjwt.version>
<jwt.joda.version>2.9.7</jwt.joda.version>
<swagger.version>2.7.0</swagger.version>
<swagger.anno.version>1.5.13</swagger.anno.version>
<beanutils.version>1.9.3</beanutils.version>
<aliyun.sdk.core.version>3.3.1</aliyun.sdk.core.version>
<aliyun.sdk.dysmsapi.version>1.0.0</aliyun.sdk.dysmsapi.version>
<fastjson.version>1.2.9</fastjson.version>
<zx.version>1.0-SNAPSHOT</zx.version>
</properties>
<!-- 1 确定spring boot的版本-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<!-- 3 锁定版本-->
<dependencyManagement>
<dependencies>
<!-- sprig cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud-release.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--nacos -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos.version}</version>
</dependency>
<!--nacos cloud 发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${alibaba.cloud.version}</version>
</dependency>
<!--nacos cloud 配置 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${alibaba.cloud.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>${alibaba.cloud.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<version>${alibaba.cloud.version}</version>
</dependency>
<!-- mybatis plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- druid启动器 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.starter.version}</version>
</dependency>
<!--swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>${swagger.anno.version}</version>
</dependency>
<!--jwt-->
<!--JavaBean工具类,用于JavaBean数据封装-->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>${beanutils.version}</version>
</dependency>
<!--jwt工具-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jwt.jjwt.version}</version>
</dependency>
<!--joda 时间工具类 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${jwt.joda.version}</version>
</dependency>
<!--短信-->
<dependency>
<groupId>com.aliyuncs</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>${aliyun.sdk.core.version}</version>
</dependency>
<dependency>
<groupId>com.aliyuncs.dysmsapi</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>${aliyun.sdk.dysmsapi.version}</version>
</dependency>
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!--自定义项目 zx.version-->
<dependency>
<groupId>com.czxy.zx</groupId>
<artifactId>zx_common_practise</artifactId>
<version>${zx.version}</version>
</dependency>
<dependency>
<groupId>com.czxy.zx</groupId>
<artifactId>zx_domain_practise</artifactId>
<version>${zx.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
3.3: Crear un subproyecto: zx_common_practise
Importar dependencias en el archivo pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--lombok , @Data 等-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<!--jwt工具-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
<!--joda 时间工具类 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
<!--JavaBean工具类,用于JavaBean数据封装-->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
</dependency>
<!-- vod相关 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.1</version>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-vod</artifactId>
<version>2.15.11</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20170516</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-sdk-vod-upload</artifactId>
<version>1.4.13</version>
</dependency>
</dependencies>
Importe archivos de configuración comunes: excepciones, animaciones captcha, empaquetado de resultados, correos electrónicos, herramientas de video, etc.
3.4: Crear subproyecto: zx_domain_practise
confiar:
<dependencies>
<!--lombok , @Data 等-->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.13</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--jackson , @JsonFormat-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</dependency>
<!--mybatis-plus , @TableName @TableId 等 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
</dependency>
</dependencies>
3.5: Crear un subproyecto: zx_geteway
confiar:
<dependencies>
<!-- 网关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- nacos 服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
application.yml: configure la puerta de enlace en el archivo yml, el propósito de acceder a otros servicios y el acceso unificado a través de la puerta de enlace
Puerto: 10010
#端口号
server:
port: 10010
spring:
application:
name: zx-gateway
servlet:
multipart:
max-file-size: 2MB #上传文件的大小
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #nacos服务地址
gateway:
discovery:
locator:
enabled: true #开启服务注册和发现的功能,自动创建router以服务名开头的请求路径转发到对应的服务
lowerCaseServiceId: true #将请求路径上的服务名配置为小写
sc:
jwt:
secret: sc@Login(Auth}*^31)&czxy% # 登录校验的密钥
pubKeyPath: D:/rsa/rsa.pub # 公钥地址
priKeyPath: D:/rsa/rsa.pri # 私钥地址
expire: 360 # 过期时间,单位分钟
filter:
allowPaths:
- swagger
- /api-docs
- /user/login
- /user/info
- /user/register
- /user/sendemail
- /user/active
- /verifycode
Importe la clase de procesamiento entre dominios: cuando el front-end accede al back-end, se producirá un error entre dominios. Esta clase de configuración maneja el procesamiento.
@Configuration
public class GlobalCorsConfig {
@Bean
public WebFilter corsFilter2() {
return (ServerWebExchange ctx, WebFilterChain chain) -> {
ServerHttpRequest request = ctx.getRequest();
if (CorsUtils.isCorsRequest(request)) {
HttpHeaders requestHeaders = request.getHeaders();
ServerHttpResponse response = ctx.getResponse();
HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod();
HttpHeaders headers = response.getHeaders();
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, requestHeaders.getOrigin());
headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS,
requestHeaders.getAccessControlRequestHeaders());
if (requestMethod != null) {
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, requestMethod.name());
}
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "*");
if (request.getMethod() == HttpMethod.OPTIONS) {
response.setStatusCode(HttpStatus.OK);
return Mono.empty();
}
}
return chain.filter(ctx);
};
}
Configurar puerta de enlace: clase de inicio
@SpringBootApplication
//配置服务发现
@EnableDiscoveryClient
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class,args);
}
}
3.6: Crear un subproyecto: zx_service_teacher
Servicio de profesores: adiciones, eliminaciones, revisiones al back-end del servicio de profesores principal hoy
importar dependencias
<dependencies>
<!--web起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- nacos 客户端 -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</dependency>
<!-- nacos 服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<!-- feign 远程调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- mybatis plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--自定义项目-->
<dependency>
<groupId>com.czxy.zx</groupId>
<artifactId>zx_common_practise</artifactId>
</dependency>
<dependency>
<groupId>com.czxy.zx</groupId>
<artifactId>zx_domain_practise</artifactId>
</dependency>
<!-- redis 启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- JavaMail 启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- MQ 启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<!--开发者工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
configurar aplicación.yml
# Número de puerto del servicio servidor: puerto: 9999 # Nombre del servicio primavera: aplicación: nombre: fuente de datos del servicio del maestro : nombre de la clase del controlador: com.mysql.jdbc.Url del controlador : jdbc:mysql://127.0.0.1:3306/zx_edu_teacher?useUnicode= true&characterEncoding=utf8 nombre de usuario: root contraseña: root druid: #druid configuración del grupo de conexiones tamaño inicial: 1 #inicialización tamaño del grupo de conexiones min-idle: 1 #número mínimo de conexiones max-active: 20 #número máximo de conexiones test-on- préstamo: verdadero #Autenticación al obtener una conexión afectará el rendimiento nube: nacos: descubrimiento: dirección-servidor: 127.0.0.1:8848 #dirección del servicio nacos redis: base de datos: 0 #Índice de base de datos, el valor es 0-15, lo que indica que se pueden seleccionar 16 bibliotecas host: 127.0.0.1 #Puerto de dirección del servidor : 6379 #Número de puerto de conexión del servidor mail: host: smtp.126.com #Servidor de correo de envío nombre de usuario: [email protected] # Contraseña de la cuenta: 1qaz2wsx #Codificación predeterminada de la contraseña: UTF-8 #La codificación predeterminada es rabbitmq: host: 127.0.0.1 puerto: 5672 nombre de usuario: invitado contraseña: invitado virtualHost: / devtools: reiniciar: habilitado : true # Establecer para habilitar la implementación en caliente rutas adicionales: src/main/java #Reiniciar directorio excluir: WEB-INF/** freemarker: cache: false #La página no carga el caché y la modificación entra en vigor de inmediato #Habilitar log4j para imprimir sentencias SQL registrando: level: com: czxy: zx: teacher: mapper: debug # mp日志打印 mybatis-plus: configuración: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: logic-delete- valor: 1 lógica-no-eliminar-valor: 0
Configurar el profesor para iniciar la clase:
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class TeacherApplication {
public static void main(String[] args) {
SpringApplication.run(TeacherApplication.class,args);
}
}
@SpringBootApplication: para marcar una clase de programa principal, lo que indica que se trata de una aplicación Spring Boot
@EnableDiscoveryClient: configurar el descubrimiento de servicios
@EnableFeignClients: configurar la llamada remota Fingir
4. Trabajo preliminar del módulo docente:
4.1:JavaBean
Profesor: JavaBean
@Data//lombok注解
@ApiModel(value = "EduTeacher对象",description = "讲师")//swagger注解
public class EduTeacher {
@TableId(value = "id",type = IdType.AUTO)//mybatis-plus的注解
@ApiModelProperty(value = "讲师ID")//swagger注解
private String id;
@ApiModelProperty(value = "讲师姓名")
private String name;
@ApiModelProperty(value = "讲师资历,一句话说明讲师")
private String intro;
@ApiModelProperty(value = "讲师简介")
private String career;
@ApiModelProperty(value = "头衔 1高级讲师 2首席讲师")
private Integer level;
@ApiModelProperty(value = "讲师头像")
private String avatar;
@ApiModelProperty(value = "讲师排序")
private Integer sort;
@ApiModelProperty(value = "逻辑删除 1已删除, 0未删除")
@TableField(value = "is_deleted",fill = FieldFill.INSERT)
@TableLogic//逻辑删除
private Integer isDeleted;
@ApiModelProperty(value = "创建时间")
@TableField(value = "gmt_create",fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date gmtCreate;
@ApiModelProperty(value = "更新时间")
@TableField(value = "gmt_modified",fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date gmtModified;
}
4.2: mapeador
@Mapper
public interface TeacherMapper extends BaseMapper<EduTeacher> {
}
4.3:servicio
interfaz:
public interface EduTeacherService extends IService<EduTeacher> {
Page<EduTeacher> condition(TeacherVo teacherVo, Integer current, Integer size);
}
Clase de implementación:
@Service
//开启事务管理
@Transactional
public class EduTeacherServiceImpl extends ServiceImpl<TeacherMapper, EduTeacher> implements EduTeacherService {
@Override
public Page<EduTeacher> condition(TeacherVo teacherVo, Integer current, Integer size) {
//创建条件
QueryWrapper<EduTeacher> eduTeacherQueryWrapper = new QueryWrapper<>();
if (StringUtils.isNotBlank(teacherVo.getName())){
eduTeacherQueryWrapper.like("name",teacherVo.getName());
}
if (StringUtils.isNotBlank(teacherVo.getLevel())){
eduTeacherQueryWrapper.eq("level",teacherVo.getLevel());
}
if (StringUtils.isNotBlank(teacherVo.getBeginDate())){
eduTeacherQueryWrapper.ge("gmt_create",teacherVo.getBeginDate()+"00:00:00");
}
if (StringUtils.isNotBlank(teacherVo.getEndDate())){
eduTeacherQueryWrapper.le("gmt_create",teacherVo.getEndDate()+"00:00:00");
}
//分页
Page<EduTeacher> eduTeacherPage = new Page<>(current, size);
//查询
baseMapper.selectPage(eduTeacherPage,eduTeacherQueryWrapper);
return eduTeacherPage;
}
}
4,4: controlador
4.5: Copiar clase de configuración
Una es la clase de configuración para pruebas de swagger.
Una es la clase de configuración para el complemento de paginación Mybatispus
4.6: Acceso a la arrogancia
Configure la puerta de enlace para acceder a swagger.ui.html mediante la puerta de enlace que accede al servicio
Dirección a la que se accede a través de la puerta de enlace: http://localhost:10010/teacher-service/swagger-ui.html#/
Echemos un vistazo al acceso directo a la dirección de servicio del maestro: http://localhost:9999/swagger-ui.html
Se puede acceder a ambos
5. Función: borrado lógico de profesores
5.1: método de eliminación lógica del controlador
@DeleteMapping("/{teacherid}")
@ApiOperation(value = "通过id删除老师")
public BaseResult deleteByid(@PathVariable("teacherid")Integer teacherid){
boolean flag = eduTeacherService.removeById(teacherid);
if (flag){
return BaseResult.ok("删除成功");
}else {
return BaseResult.error("删除失败");
}
}
5.2: Anotaciones de lápidas
La anotación se configura en el JavaBean del profesor:
@ApiModelProperty(value = "逻辑删除 1已删除, 0未删除")
//这个注解属于swagger:用来标识
@TableField(value = "is_deleted",fill = FieldFill.INSERT)
//用来进行填充默认数据
@TableLogic//逻辑删除
private Integer isDeleted;
5.3: Configurar controlador: realizar procesamiento de mensajes asíncrono
@Component
public class TeacherMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
// 添加-自动填充数据
setFieldValByName("isDeleted", 0, metaObject);
// 添加时间、修改时间
setFieldValByName("gmtCreate", new Date(), metaObject);
setFieldValByName("gmtModified", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
// 修改时间
setFieldValByName("gmtModified", new Date(), metaObject);
}
}
5.4: Configurar el archivo application.yml
# mp log print mybatis-plus: configuración: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: logic-delete-value: 1 #Eliminar el valor de la columna correspondiente en el base de datos a 1 valor lógico no eliminado: 0#No eliminar el valor de la columna correspondiente en la base de datos es 0
5.5: Probar el método en swagger
eliminar papa con id 10
Eliminado con éxito, verifique los datos de la base de datos
6. Función: consulta condicional y paginación
6.1:Controlador
Esta consulta condicional y la paginación siguen siendo muy importantes.
@ApiOperation("条件查询老师")
@PostMapping("/condition/{current}/{size}")
public BaseResult condition(@RequestBody TeacherVo teacherVo,Integer current,Integer size){
Page<EduTeacher> condition = eduTeacherService.condition(teacherVo, current, size);
if (condition!=null){
return BaseResult.ok("查询成功",condition.getRecords());
}else {
return BaseResult.error("查询失败");
}
}
6.2:Servicio
@Service
//开启事务管理
@Transactional
public class EduTeacherServiceImpl extends ServiceImpl<TeacherMapper, EduTeacher> implements EduTeacherService {
@Override
public Page<EduTeacher> condition(TeacherVo teacherVo, Integer current, Integer size) {
//创建条件
QueryWrapper<EduTeacher> eduTeacherQueryWrapper = new QueryWrapper<>();
if (StringUtils.isNotBlank(teacherVo.getName())){
eduTeacherQueryWrapper.like("name",teacherVo.getName());
}
if (StringUtils.isNotBlank(teacherVo.getLevel())){
eduTeacherQueryWrapper.eq("level",teacherVo.getLevel());
}
if (StringUtils.isNotBlank(teacherVo.getBeginDate())){
eduTeacherQueryWrapper.ge("gmt_create",teacherVo.getBeginDate()+"00:00:00");
}
if (StringUtils.isNotBlank(teacherVo.getEndDate())){
eduTeacherQueryWrapper.le("gmt_create",teacherVo.getEndDate()+"00:00:00");
}
//分页
Page<EduTeacher> eduTeacherPage = new Page<>(current, size);
//查询
baseMapper.selectPage(eduTeacherPage,eduTeacherQueryWrapper);
return eduTeacherPage;
}
7. Función: agregar maestro, modificar maestro
7.1: Agregar clase de configuración: complete agregar y modificar tiempo
La clase de configuración se ha dado anteriormente.
7.2: Agregar un maestro
7.2.1:Controlador
@ApiOperation("添加老师")
@PostMapping
public BaseResult addteacher(@RequestBody EduTeacher eduTeacher){
boolean flag = eduTeacherService.save(eduTeacher);
if (flag){
return BaseResult.ok("添加成功");
}else {
return BaseResult.error("添加失败");
}
}
7.3: Modificar el profesor
7.3.1:Controlador
@PutMapping
@ApiOperation(value = "修改老师")
public BaseResult updateteacher(@RequestBody EduTeacher eduTeacher){
boolean flag = eduTeacherService.updateById(eduTeacher);
if (flag){
return BaseResult.ok("修改成功");
}else {
return BaseResult.error("修改失败");
}
}
8. Funciones: eliminar profesores, consultar profesores, eliminar profesores en lotes
8.1: Eliminar profesor
8.1.1:Controlador
@DeleteMapping("/{teacherid}")
@ApiOperation(value = "通过id删除老师")
public BaseResult deleteByid(@PathVariable("teacherid")Integer teacherid){
boolean flag = eduTeacherService.removeById(teacherid);
if (flag){
return BaseResult.ok("删除成功");
}else {
return BaseResult.error("删除失败");
}
}
8.2: Consultar al profesor
8.2.1:Controlador
@GetMapping("/{teacherid}")
@ApiOperation("通过id查询老师详情")
public BaseResult selectByid(@PathVariable("teacherid") Integer teacherid){
EduTeacher eduTeacher = eduTeacherService.getById(teacherid);
if (eduTeacher!=null){
return BaseResult.ok("查询成功",eduTeacher);
}else {
return BaseResult.error("查询失败");
}
}
8.3: Eliminar profesores en lotes
8.3.1:Controlador
@PostMapping("/batchdelete")
@ApiOperation("批量删除老师")
public BaseResult batchdelete(@RequestBody List<Integer> ids){
boolean flag = eduTeacherService.removeByIds(ids);
if (flag){
return BaseResult.ok("批量删除成功");
}else {
return BaseResult.error("批量删除失败");
}
}
Resumir
Funciones principales: Consulta de condición y paginación, el resto de funciones se llaman a través del Servicio general en MybatisPlus para lograr la realización de la función
Clase de herramienta BaseRsult: se utiliza para encapsular datos para su devolución
Clase de configuración GlobalCorsConfig: utilizada para manejar dominios cruzados
TeacherMetaObjectHandler: Procesa la información, que se utiliza en el servicio del profesor. Por ejemplo: la hora de creación y la hora de modificación de cada dato.