MyBatis-Plus - コード生成と複数のデータソース

序文

        この記事では、MyBatis-Plus でのコード生成と複数のデータソースの使用について主に整理します。基本的な操作は比較的簡単です。公式 Web サイトには詳細なチュートリアルもあります。Lizhi は、MyBatis-Plus でのコード生成と複数のデータ ソースの使用について整理します。必要です。私の小さな友達~~~


記事ディレクトリ

序文

1. 一般的な列挙

2. コードジェネレーター

3. 複数のデータソース

3.1 マルチデータソース環境の構成

3.2 複数のデータソースの適用

要約する


1. 一般的な列挙

性別などの一部のフィールド値が固定されている場合、MyBatis-Plus の一般的な列挙を使用してこれを実現できます。

列挙型クラスを設定する

 @EnumValue: 注釈ロック解除でマークされた属性の値をデータベースに保管します。この注釈が追加されず、列挙スキャンが有効になっていない場合、データベースに挿入されるデフォルト値は MALE | FEMALE です。

package com.crj.mybatisplus_test.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.Getter;

@Getter
public enum SexEnum {
    MALE(1,"男"),
    FEMALE(2,"女");

    @EnumValue //将注解锁标识的属性的值存储在数据库中
    private Integer sex;
    private String sexName;

    SexEnum(Integer sex, String sexName) {
        this.sex = sex;
        this.sexName = sexName;
    }
}

構成ファイルでスキャン共通の列挙を設定する

mybatis-plus:
  #设置扫描通用枚举
  type-enums-package: com.crj.mybatisplus_test.enums

テストクラス

package com.crj.mybatisplus_test;

import com.crj.mybatisplus_test.enums.SexEnum;
import com.crj.mybatisplus_test.mapper.UserMapper;
import com.crj.mybatisplus_test.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class MyBatisPlusEnumTset {
    @Autowired
    private UserMapper userMapper;
    @Test
    public void test(){
        User user = new User();
        user.setName("CRJ");
        user.setAge(21);
        user.setSex(SexEnum.MALE);
        int result = userMapper.insert(user);
        System.out.println("result:"+result);
    }
}

エンティティクラス

package com.crj.mybatisplus_test.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.crj.mybatisplus_test.enums.SexEnum;
import lombok.*;

//使用Lombok简化开发加上无参构造方法、有参构造
//@NoArgsConstructor
//@AllArgsConstructor
//@Getter
//@Setter
//@EqualsAndHashCode
@Data
@TableName("t_user")
public class User {
    @TableId(value = "uid",type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;

    private SexEnum sex;

}

2. コードジェネレーター

MyBatis のリバース エンジニアリングとは異なり、MyBatis-Plus のコード ジェネレーターは、テーブルを介して制御層、ビジネス層、永続化層、マッピング ファイル、およびマッパー インターフェイスを生成できます。

コード ジェネレーターの依存関係を追加する

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.1</version>
</dependency>
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.31</version>
</dependency>

公式 Web サイトを実行するためのデモを迅速に生成

package com.crj.mybatisplus_test;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Collections;

public class FastAutoGeneratorTest {
    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8&characterEncoding=utf-8&userSSL=false", "username", "password")
                .globalConfig(builder -> {
                    builder.author("CRJ") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir("D://mybatis_plus"); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("com.crj") // 设置父包名
                            .moduleName("mybatisplus") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://mybatis_plus")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder.addInclude("t_user") // 设置需要生成的表名
                            .addTablePrefix("t_", "c_"); // 设置过滤表前缀
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();
    }
}

3. 複数のデータソース

        マルチデータ ソースはどちらも動的データ ソースです。プロジェクト開発が徐々に拡大するにつれて、単一のデータ ソースと単一のデータ ソースでは、複数のタイプ ライブラリ、1 つのマスターと複数のスレーブ、混合など、要求の厳しいプロジェクトのサポート ニーズを満たすことができなくなります。モードなどにより、マルチデータ ソース拡張の範囲が拡張されます。日常の開発シナリオでは、複数のデータ ソースの操作も一般的です。複数のデータ ソース環境でデータをどのように操作するかを見てみましょう。

3.1 マルチデータソース環境の構成

まず、環境の依存関係を追加して、構成ファイルで複数のデータ ソースを有効にします。 

<!--多数据源的依赖-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.5.0</version>
</dependency>

データ ソースの構成: 複数のライブラリ、1 つのマスターと複数のスレーブ、または混合モードの構造については、公式ドキュメントを参照してください。ここでは 1 つのマスターと複数のスレーブについて説明します。 

spring:
  #配置数据源信息
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8&characterEncoding=utf-8&userSSL=false
          username: root
          password: 123456
          driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
        slave_1:
          url: jdbc:mysql://localhost:3306/mybatis_plus_1?serverTimezone=GMT%2B8&characterEncoding=utf-8&userSSL=false
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver
        slave_2:
          url: ENC(xxxxx) # 内置加密,使用请查看详细文档,文档需要付费!
          username: ENC(xxxxx)
          password: ENC(xxxxx)
          driver-class-name: com.mysql.jdbc.Driver
        #......省略
        #以上会配置一个默认库master,一个组slave下有两个子库slave_1,slave_2

3.2 複数のデータソースの適用

エンティティクラス

package com.crj.mybatisPlusDatasource.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("t_user")
public class User {
    @TableId(value = "uid",type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;

}

マッパーインターフェース 

マッパー インターフェイスは、MyBatis-Plus に統合された CRUD データベース操作用の BaseMapper インターフェイスを継承し、関連する CRUD コードを継承する必要もあります。 

package com.crj.mybatisPlusDatasource.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.crj.mybatisPlusDatasource.pojo.User;
import org.springframework.stereotype.Repository;

@Repository
public interface UserMapper extends BaseMapper<User> {
}

サービスインターフェース

サービス インターフェイスは、データ操作に関連するクラス メソッドを取得するために、MyBatis-Plus の IService インターフェイスを継承する必要があります。 

package com.crj.mybatisPlusDatasource.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.crj.mybatisPlusDatasource.pojo.User;
import org.springframework.stereotype.Service;

public interface UserService extends IService<User> {
}

サービスインターフェース実装クラス

@DS は、エンティティ クラス インターフェイスが使用するデータ ソースを宣言するために ここで使用されていることに注意してください。

package com.crj.mybatisPlusDatasource.service.impl;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.crj.mybatisPlusDatasource.mapper.UserMapper;
import com.crj.mybatisPlusDatasource.pojo.User;
import com.crj.mybatisPlusDatasource.service.UserService;
import org.springframework.stereotype.Service;

@Service
@DS("master")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

}

User エンティティ クラスの作成と同じ手順を使用して Product エンティティ クラスを作成し、テスト クラスで複数のデータ ソースが正常に開かれるかどうかをテストします。

サービス層インターフェイスとマッパー層インターフェイスの違い

        簡単に理解すると、マッパー層インターフェイスは BaseMapper インターフェイスを継承して基本的な CRUD 機能を実装しますが、サービスは通常、アプリケーションのビジネス ロジック メソッドを定義し、データの高レベルの抽象化を提供します。サービス層インターフェイス実装クラスは、BaseMapper インターフェイスで基本的な CRUD 操作を呼び出すことによってビジネス ロジックを実装します。


要約する

        ついに、MyBatis-Plus の段階的学習が終わり、Lizhi はプロジェクトの学習に戻ることができます。リジは最近少し不安です(笑)少し不安です。この期間はまだ勉強を見直す時間が必要です。しっかりとした基礎を築くために、ソフトウェアの設計パターンと設計原則から始めましょう~~~

今日は過去になってしまいましたが、明日の未来を楽しみにしています!私はXiao Lizhiです。テクノロジーの成長の道を一緒に歩んでいきます。コーディングは簡単ではありません。小さな足を上げて親指を立ててください、ははは~~~ありがとうございます♥~~~

おすすめ

転載: blog.csdn.net/qq_62706049/article/details/132677044