MybatisPlus(SpringBoot版)的通用枚举和代码生成器、多数据源配置

目录

续前面

一、通用枚举

二、代码生成器

三、多数据源配置


一、通用枚举

定义枚举类:

java 复制代码
package com.qcby.SpringBoot.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;
    }
}

在配置文件中配置属性:

java 复制代码
mybatis-plus:
  # 配置MyBatis日志  configuration:
  log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  
  # 配置扫描通用枚举
  type-enums-package: com.qcby.SpringBoot.enums

测试:

java 复制代码
@Test
public void testSexEnum(){
    User user = new User();
    user.setName("Enum");
    user.setAge(20);
    //设置性别信息为枚举项,会将@EnumValue注解所标识的属性值存储到数据库
    user.setSex(SexEnum.MALE);
    //INSERT INTO t_user ( username, age, sex ) VALUES ( ?, ?, ? ) //Parameters: Enum(String), 20(Integer), 1(Integer)
    userMapper.insert(user);
}

二、代码生成器

导入依赖:

java 复制代码
<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>

生成Main方法:

java 复制代码
package com.qcby.SpringBoot.util;

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

import java.util.Collections;

/**
 * mybatisplus代码生成器 
 */
 public class FastAutoGeneratorTest {
    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/mybatis_plus?characterEncoding=utf-8&userSSL=false",
                        "root",
                        "root")
                //全局配置                
                .globalConfig(builder -> {
                    builder.author("qcby") // 设置作者                            
                    //.enableSwagger() // 开启 swagger 模式                            
                    .fileOverride() // 覆盖已生成文件                            
                    .outputDir("D://mybatis_plus"); // 指定输出目录                
                })
                //设置包的                
                .packageConfig(builder -> {
                    builder.parent("com.qcby") // 设置父包名                            
                    .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()执行的意思                
                .execute();
    }
}

生成结果:

三、多数据源配置

适用于多种场景:纯粹多库、读写分离、一主多从、混合模式等。

需要导入依赖:

XML 复制代码
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.5.0</version>
</dependency>

在application.yaml中配置配置多数据源:

XML 复制代码
spring:
    dynamic:
      # 设置默认的数据源或者数据源组 ,默认值即为master      
      primary: master
      # 严格匹配数据源 ,默认false.true未匹配到指定数据源时抛异常 ,false使用默认数据源      
      strict: false      
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
          driver-class-name: com.mysql.jdbc.Driver
          username: root
          password: root
        slave_1:
          url: jdbc:mysql://localhost:3306/mybatis_plus_1?characterEncoding=utf-8&useSSL=false
          driver-class-name: com.mysql.jdbc.Driver
          username: root
          password: root

在serviceImpl层加上注解,来表示本serviceImpl用哪个数据库

java 复制代码
package com.qcby.SpringBoot.service.Impl;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qcby.SpringBoot.mapper.ProductMapper;
import com.qcby.SpringBoot.pojo.Product;
import com.qcby.SpringBoot.service.ProductService;
import org.springframework.stereotype.Service;

@DS("slave_1")
@Servicepublic class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
}
java 复制代码
package com.qcby.SpringBoot.service.Impl;

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

/**
 * ServiceImpl实现了IService,提供了IService中基础功能的实现 
 * 若ServiceImpl无法满足业务需求,则可以使用自定的UserService定义方法,并在实现类中实现 
 */
 @Service
 @DS("master") //指定所操作的数据源
 public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
相关推荐
未若君雅裁15 分钟前
多线程项目场景:CountDownLatch、Future、Semaphore
java
小科先生21 分钟前
初学者安装java
java·开发语言
zzz_236832 分钟前
【Spring】面试突击系列(三):Spring Web MVC 深度解析
前端·spring·面试
wyhwust37 分钟前
如何让maven帮我们去下载合适的包
java·maven
ID_1800790547342 分钟前
小红书笔记评论 API 接口深度解析(带全套 JSON 示例・技术实战版)
java·开发语言·windows
逍遥德44 分钟前
Java编程高频的“技术点”-03:“下划线命名”参数,后端用“驼峰命名“接收
java·后端·springboot
jiayong231 小时前
Maven clean 报错与 Maven Profile 机制总结
java·maven
qq_366086221 小时前
测试接口传参数时,放在Header和Body中后台接收参数的区别
java·开发语言·前端
Jun6261 小时前
QT(8)-线程锁
java·开发语言
biubiubiu07061 小时前
SpringBoot 3.5.4 整合Quartz 定时任务
java·spring boot·spring