序文
この記事では、MyBatis-Plus でのコード生成と複数のデータソースの使用について主に整理します。基本的な操作は比較的簡単です。公式 Web サイトには詳細なチュートリアルもあります。Lizhi は、MyBatis-Plus でのコード生成と複数のデータ ソースの使用について整理します。必要です。私の小さな友達~~~
記事ディレクトリ
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です。テクノロジーの成長の道を一緒に歩んでいきます。コーディングは簡単ではありません。小さな足を上げて親指を立ててください、ははは~~~ありがとうございます♥~~~