当前位置: 首页 > news >正文

在线教育项目【老师服务】

目录

1.传智在线项目

1.1功能简介

1.2系统模块

1.3系统架构

2.数据库设计

2.1 数据库

2.2 数据表

3.创建项目

3.1 项目架构

3.2 创建父项目:zx_parent_practise

3.3:创建子项目:zx_common_practise

3.4:创建子项目:zx_domain_practise

3.5:创建子项目:zx_geteway

3.6:创建子项目:zx_service_teacher

4,老师模块的前置工作:

4.1:JavaBean

4.2:mapper

4.3:service

4.4:controller

4.5:拷贝配置类

4.6:访问swagger

5,功能:老师的逻辑删除

5.1:controller逻辑删除方法

5.2:逻辑删除注解

5.3:配置handler:进行异步消息处理

5.4:配置application.yml文件

5.5:在swagger中测试该方法

6,功能:条件查询和分页

6.1:Controller

6.2:Service

7,功能:添加老师,修改老师

7.1:添加配置类:进行添加和修改时间的填充

7.2:添加老师

7.2.1:Controller

7.2.2:Service

7.3:修改老师

7.3.1:Controller

7.3.2:Service

8,功能:删除老师,查询老师,批量删除老师

8.1:删除老师

8.1.1:Controller

8.1.2:Service

8.2:修改老师

8.2.1:Controller

8.2.2:Service

8.3:修改老师

8.3.1:Controller

8.3.2:Service

总结


1.传智在线项目

1.1功能简介

  • 做的什么模块?

    • 整个项目分为两大部分:前台部分、后台部分

    • 前台部分:为用户使用部分,可以进行视频的购买与学习。

    • 后台部分:为管理操作部分,进行视频上传与维护。

    • 本课程主要完成的是后台部分

  • 用到什么技术?

    • 后端:SpringCloud alibaba核心组件Nacos+SSM+mybatis-plus+swagger-ui+POI+Redis + JavaMail +RabbitMQ+EasyExcel.....

    • 前端:Vue全家桶:Vue+Vue-Router+Vuex+SPA + element ui admin

1.2系统模块

1.3系统架构

  • 前后端分离开发:

    • 解耦

    • 后端和前端完全分离,并且后台接口可以供给多端使用!(APP,微信,PC,WAP)(Restful风格的接口可以给任何应用去使用)

2.数据库设计

2.1 数据库

zx_edu_course:课程相关的库

zx_edu_teacher:老师板块相关的库

zx_edu_user:登录用户相关的库

zx_edu_vod:视频相关的库


2.2 数据表

 本章主要记录学习中:老师后端的增删改查(用到了该表)

3.创建项目

3.1 项目架构

项目结构图:

3.2 创建父项目:zx_parent_practise

 在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:创建子项目:zx_common_practise

在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>

 导入通用的配置文件:异常,验证码动图,结果封装,邮件,视频工具类等等

3.4:创建子项目:zx_domain_practise

依赖:

 <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:创建子项目:zx_geteway

依赖:

 <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:在yml文件中配置一下网关,目的访问其他服务,统一经过网关进行访问

端口: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

 导入跨域处理类:前端访问后端时会出现跨域的错误,该配置类进行处理

@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);
        };
    }

配置网关:启动类


@SpringBootApplication
//配置服务发现
@EnableDiscoveryClient
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class,args);
    }
}

3.6:创建子项目:zx_service_teacher

老师服务:今天主要的老师服务后端的增删改查

 导入依赖

 <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>

配置application.yml

# 服务端口号
server:
  port: 9999
# 服务名
spring:
  application:
    name: teacher-service
  datasource:
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/zx_edu_teacher?useUnicode=true&characterEncoding=utf8
    username: root
    password: root
    druid:    #druid 连接池配置
      initial-size: 1       #初始化连接池大小
      min-idle: 1           #最小连接数
      max-active: 20        #最大连接数
      test-on-borrow: true  #获取连接时候验证,会影响性能
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848   #nacos服务地址
  redis:
    database: 0       #数据库索引,取值0-15,表示16个库可选择
    host: 127.0.0.1   #服务器地址
    port: 6379        #服务器连接端口号
  mail:
    host: smtp.126.com          #发送邮件服务器
    username: itcast_lt@126.com #账号
    password: 1qaz2wsx          #密码
    default-encoding: UTF-8     #默认编码时
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
    virtualHost: /
  devtools:
    restart:
      enabled: true  #设置开启热部署
      additional-paths: src/main/java #重启目录
      exclude: WEB-INF/**
  freemarker:
    cache: false    #页面不加载缓存,修改即时生效

#开启log4j打印SQL语句
logging:
  level:
    com:
      czxy:
        zx:
          teacher:
            mapper: debug

# mp日志打印
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0 

配置老师启动类:

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class TeacherApplication {
    public static void main(String[] args) {
        SpringApplication.run(TeacherApplication.class,args);
    }
}

 @SpringBootApplication:来标注一个主程序类,说明这是一个Spring Boot应用
@EnableDiscoveryClient:配置服务发现
@EnableFeignClients:配置远程调用Feign

4,老师模块的前置工作:

4.1:JavaBean

 老师: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:mapper

@Mapper
public interface TeacherMapper extends BaseMapper<EduTeacher> {
}

4.3:service

接口:

public interface EduTeacherService extends IService<EduTeacher> {
    Page<EduTeacher> condition(TeacherVo teacherVo, Integer current, Integer size);
}

实现类:

@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:controller

4.5:拷贝配置类

一个是进行swagger测试的配置类

一个是进行Mybatispus分页插件的配置类 

4.6:访问swagger

配置网关就通过:网关访问服务的方式进行访问swagger.ui.html

通过网关访问的地址:http://localhost:10010/teacher-service/swagger-ui.html#/

 咱们再看一下直接访问老师服务地址:http://localhost:9999/swagger-ui.html

 两种都可以进行访问

5,功能:老师的逻辑删除

5.1:controller逻辑删除方法

    @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:逻辑删除注解

该注解在老师JavaBean中进行配置:

 @ApiModelProperty(value = "逻辑删除 1已删除, 0未删除")  
//这个注解属于swagger:用来标识
    @TableField(value = "is_deleted",fill = FieldFill.INSERT)
//用来进行填充默认数据
    @TableLogic//逻辑删除
    private Integer isDeleted;

5.3:配置handler:进行异步消息处理


@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:配置application.yml文件

# mp日志打印
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      logic-delete-value: 1
#删除数据库中对应列的值为1
      logic-not-delete-value: 0

#不删除数据库中对应的列值为0

5.5:在swagger中测试该方法

删除id为10的土豆

 

 成功删除,查看一下数据库数据

6,功能:条件查询和分页

6.1:Controller

 这个条件查询和分页还是挺重要的

    @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:Service

@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,功能:添加老师,修改老师

7.1:添加配置类:进行添加和修改时间的填充

 配置类上面已经给出

7.2:添加老师

7.2.1:Controller

    @ApiOperation("添加老师")
    @PostMapping
    public BaseResult addteacher(@RequestBody EduTeacher eduTeacher){
        boolean flag = eduTeacherService.save(eduTeacher);
        if (flag){
            return BaseResult.ok("添加成功");
        }else {
            return BaseResult.error("添加失败");
        }
    }

7.3:修改老师

7.3.1:Controller

   @PutMapping
    @ApiOperation(value = "修改老师")
    public BaseResult updateteacher(@RequestBody EduTeacher eduTeacher){
        boolean flag = eduTeacherService.updateById(eduTeacher);
        if (flag){
            return BaseResult.ok("修改成功");
        }else {
            return BaseResult.error("修改失败");
        }
    }

8,功能:删除老师,查询老师,批量删除老师

8.1:删除老师

8.1.1:Controller

@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:查询老师

8.2.1:Controller

 @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:批量删除老师

8.3.1:Controller

    @PostMapping("/batchdelete")
    @ApiOperation("批量删除老师")
    public BaseResult batchdelete(@RequestBody List<Integer> ids){
        boolean flag = eduTeacherService.removeByIds(ids);
        if (flag){
            return BaseResult.ok("批量删除成功");
        }else {
            return BaseResult.error("批量删除失败");
        }
    }

总结

主要功能:条件和分页查询,其余的功能都是通过MybatisPlus中的通用Service进行调用方法,以用来达到功能的实现

BaseRsult工具类:用来封装数据进行返回

 GlobalCorsConfig配置类:用来处理跨域

 TeacherMetaObjectHandler:对信息进行处理,该老师服务中应用了。例如:每条数据的创建时间和修改时间。

相关文章:

  • 堆的应用:堆排序及TopK问题
  • 【Android development】系列_01创建安卓应用程序
  • Keras CIFAR-10图像分类 GoogleNet 篇
  • 详解react生命周期和在父子组件中的执行顺序
  • 2022年山东省安全员C证复训题库模拟考试平台操作
  • 《算法导论》第11章-散列表 11.1-直接寻址表 11.2 散列表
  • 归并排序算法
  • DNSPod十问百果园焦岳:为什么开水果店是一门高科技生意?
  • 《nginx》三、nginx负载均衡
  • 操作系统——程序地址空间
  • JavaScript-操作表单和前端加密
  • 使用disruptor队列实现本地异步消费
  • 在Windows中自动压缩备份文件和目录的脚本
  • 猿创征文|Java计算【生日工具类】看这篇就够了
  • 网络-电脑网络突然变成球形, 网络不可用
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 《Java编程思想》读书笔记-对象导论
  • JAVA并发编程--1.基础概念
  • js ES6 求数组的交集,并集,还有差集
  • js 实现textarea输入字数提示
  • passportjs 源码分析
  • Python_网络编程
  • Travix是如何部署应用程序到Kubernetes上的
  • ucore操作系统实验笔记 - 重新理解中断
  • Zepto.js源码学习之二
  • 安卓应用性能调试和优化经验分享
  • 前端知识点整理(待续)
  • 驱动程序原理
  • 如何学习JavaEE,项目又该如何做?
  • 我从编程教室毕业
  • 学习ES6 变量的解构赋值
  • 学习Vue.js的五个小例子
  • 终端用户监控:真实用户监控还是模拟监控?
  • 字符串匹配基础上
  • 最近的计划
  • 国内开源镜像站点
  • 湖北分布式智能数据采集方法有哪些?
  • ​linux启动进程的方式
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #{} 和 ${}区别
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Forward) Music Player: From UI Proposal to Code
  • (pytorch进阶之路)扩散概率模型
  • (第一天)包装对象、作用域、创建对象
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (十一)手动添加用户和文件的特殊权限
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net core 6 redis操作类
  • .Net Core 中间件验签
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET国产化改造探索(一)、VMware安装银河麒麟