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 {
}
相关推荐
纪元A梦几秒前
Java设计模式:结构型模式→桥接模式
java·设计模式·桥接模式
handsomestWei42 分钟前
springboot使用tomcat浅析
spring boot·后端·tomcat
&白帝&1 小时前
JAVA JDK7时间相关类
java·开发语言·python
2301_818732061 小时前
用layui表单,前端页面的样式正常显示,但是表格内无数据显示(数据库连接和获取数据无问题)——已经解决
java·前端·javascript·前端框架·layui·intellij idea
狄加山6752 小时前
系统编程(线程互斥)
java·开发语言
星迹日2 小时前
数据结构:二叉树—面试题(二)
java·数据结构·笔记·二叉树·面试题
组合缺一2 小时前
solon-flow 你好世界!
java·solon·oneflow
HHhha.2 小时前
JVM深入学习(二)
java·jvm
杰九2 小时前
【全栈】SprintBoot+vue3迷你商城(10)
开发语言·前端·javascript·vue.js·spring boot
叩叮ING2 小时前
正则表达式中常见的贪婪词
java·服务器·正则表达式