Proyecto de educación en línea 【Servicio para maestros】

Tabla de contenido

1. Proyecto en línea Chuanzhi

1.1 Introducción a la función

1.2 Módulos del sistema

1.3 Arquitectura del sistema

2. Diseño de base de datos

2.1 Base de datos

2.2 Hoja de datos

3. Crea un proyecto

3.1 Arquitectura del proyecto

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.1:JavaBean

4.2: mapeador

4.3:servicio

4,4: controlador

4.5: Copiar clase de configuración

4.6: Acceso a la arrogancia

5. Función: borrado lógico de profesores

5.1: método de eliminación lógica del controlador

5.2: Anotaciones de lápidas

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

6.1:Controlador

6.2:Servicio

7. Función: agregar maestro, modificar maestro

7.1: Agregar clase de configuración: complete agregar y modificar tiempo

7.2: Agregar un maestro

7.2.1:Controlador

7.2.2:Servicio

7.3: Modificar el profesor

7.3.1:Controlador

7.3.2:Servicio

8. Funciones: eliminar profesores, consultar profesores, eliminar profesores en lotes

8.1: Eliminar profesor

8.1.1:Controlador

8.1.2:Servicio

8.2: Modificar el profesor

8.2.1:Controlador

8.2.2:Servicio

8.3: Modificar el profesor

8.3.1:Controlador

8.3.2:Servicio

Resumir


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.

Supongo que te gusta

Origin blog.csdn.net/m0_64550837/article/details/126677547
Recomendado
Clasificación