オンライン教育プロジェクト【ティーチャーサービス】

目次

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:ジャバビーン

4.2:マッパー

4.3:サービス

4.4:コントローラー

4.5: 構成クラスのコピー

4.6: アクセス闊歩

5. 機能: 教師の論理削除

5.1: コントローラの論理削除方法

5.2: 廃棄注釈

5.3: ハンドラーの構成: 非同期メッセージ処理の実行

5.4: application.yml ファイルを構成する

5.5: メソッドを swagger でテストする

6. 機能: 条件付きクエリとページネーション

6.1:コントローラー

6.2:サービス

7. 機能: 教師の追加、教師の変更

7.1: 構成クラスの追加: 追加および変更時間を記入

7.2: 教師を追加する

7.2.1:コントローラー

7.2.2:サービス

7.3: 教師を変更する

7.3.1:コントローラー

7.3.2:サービス

8. 機能: 教師の削除、教師のクエリ、教師の一括削除

8.1: 先生を削除する

8.1.1:コントローラー

8.1.2:サービス

8.2: 教師を変更する

8.2.1:コントローラー

8.2.2:サービス

8.3: 教師を変更する

8.3.1:コントローラー

8.3.2:サービス

要約する


1.川芝オンラインプロジェクト

1.1機能紹介

  • どのモジュールを実行しますか?

    • プロジェクト全体は、前編と後編の 2 つの部分に分かれています。

    • フロントエンド部分:ユーザーが動画を購入して学習する部分です。

    • バックグラウンド部分:管理・運用部分では、動画のアップロードやメンテナンスを行います。

    • このコースはおおむね修了して后台部分います。

  • どのような技術が使用されていますか?

    • バックエンド: SpringCloud アリババ コア コンポーネント 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、WeChat、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 connection pool configuration 
      initial-size: 1 #initialization connection pool size 
      min-idle: 1 #minimum number of connections 
      max-active: 20 
      #maximum number of connections 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 # 送信メール サーバー
    ユーザー名: [email protected] #アカウント
    パスワード: 1qaz2wsx #パスワード
    のデフォルト エンコーディング: UTF-8 #デフォルト エンコーディングは
  rabbitmq:
    ホスト: 127.0.0.1
    ポート: 5672
    ユーザー名: ゲスト
    パスワード: ゲスト
    仮想ホスト: / 
  devtools:
    再起動:
      有効: 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-値: 1
      論理削除しない値: 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:ジャバビーン

 講師:ジャバビーン

@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
public interface TeacherMapper extends BaseMapper<EduTeacher> {
}

4.3:サービス

インターフェース:

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:コントローラー

4.5: 構成クラスのコピー

1 つは、swagger テスト用の構成クラスです。

1 つは、Mybatispus ページング プラグインの構成クラスです。 

4.6: アクセス闊歩

サービスにアクセスするゲートウェイを使用して、swagger.ui.html にアクセスするようにゲートウェイを構成します。

ゲートウェイ経由でアクセスするアドレス: http://localhost:10010/teacher-service/swagger-ui.html#/

 教師サービス アドレスへの直接アクセスを見てみましょう: http://localhost:9999/swagger-ui.html

 どちらもアクセス可能

5. 機能: 教師の論理削除

5.1: コントローラの論理削除方法

    @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: ハンドラーの構成: 非同期メッセージ処理の実行


@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 log print 
mybatis-plus: 
  configuration: 
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 
  global-config: 
    db-config: 
      logic-delete-value: 1 
#データベースから 1 へ
      の論理非削除値: 0

#データベースの対応する列の値を削除しないでください 値は 0 です

5.5: メソッドを swagger でテストする

ID 10 のポテトを削除

 

 正常に削除されました。データベース データを確認してください

6. 機能: 条件付きクエリとページネーション

6.1:コントローラー

 この条件付きクエリとページネーションは依然として非常に重要です

    @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
//开启事务管理
@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:コントローラー

    @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:コントローラー

   @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:コントローラー

@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:コントローラー

 @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:コントローラー

    @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 の一般的なサービスを介して呼び出され、機能の実現を実現します。

BaseRsult ツール クラス: 返されるデータをカプセル化するために使用されます

 GlobalCorsConfig 構成クラス: クロスドメインの処理に使用

 TeacherMetaObjectHandler: 教師サービスで使用される情報を処理します。例: 各データの作成時間と変更時間。

おすすめ

転載: blog.csdn.net/m0_64550837/article/details/126677547