通用枚举:
-
概述:
- 表中有些字段值是固定的,例如性别(男或女),此时我们可以使用 MyBatis-Plus 的通用枚举来实现
-
数据库表添加字段:
-
创建通用枚举类型:
@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日志 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: #配置 MyBatis-Plus 操作表的前缀 table-prefix: t_ #配置 MyBatis-Plus 的主键策略 id-type: auto #配置扫描通用枚举 type-enums-package: com.springboot.mybatisplus.enums
-
测试:
//枚举使用: @Test public void testSexEnum(){ User user = new User(); user.setName("张三"); user.setAge(20); //设置性别信息为枚举项,会将 @EnumValue 注解所标识的属性值存储到数据库 user.setSex(SexEnum.MALE); userMapper.insert(user); }
代码生成器:
-
引入依赖:
<!--代码生成器依赖--> <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>
-
快速生成:
public class FastAutoGeneratorTest { public static void main(String[] args) { FastAutoGenerator.create("jdbc:mysql://localhost:3306/mybatis_plus","root","root") .globalConfig(builder -> { //设置作者 builder.author("root") .enableSwagger() //开启 swagger 模式 .fileOverride() //覆盖已生成文件 .outputDir("D://mybatis_lus"); //指定输出路径 }) .packageConfig(builder -> { builder.parent("com.springboot") //设置父包名 .moduleName("mybatisplus") //设置父包名 //设置 mapperxml 生成路径 .pathInfo(Collections.singletonMap(OutputFile.mapperXml,"D://mybatis_lus")); }) .strategyConfig(builder -> { builder.addInclude("t_user") //设置需要生成的表名 .addTablePrefix("t_","c_"); //设置过滤表前缀 }) //使用Freemarker 引擎模板,默认的是 velocity 引擎模板 .templateEngine(new FreemarkerTemplateEngine()) .execute(); } }
多数据源:
-
简介:
- 适用于多种场景:纯粹多库、读写分离、一主多从、混合模式等
-
模拟多库:
- 创建两个库,分别为:mybatis_plus(以前的库不动) 与 mybatis_plus_1,将 mybatis_plus 库的 product 表移动到 mybatis_plus-1 库,这样每个库一张表,通过测试用例分别获取用户数据和商品数据,如果获取成功,说明多库模拟成功
-
创建数据库及表:
- 创建数据库 mybatis_plus_1 和表 product
CREATE DATABASE `mybatis_plus_1` /*!40100 DEFAULT CHARACTER SET utf8mb4 */; use `mybatis_plus_1`; CREATE TABLE product ( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '商品名称 ', price INT(11) DEFAULT 0 COMMENT '价格 ', version INT(11) DEFAULT 0 COMMENT '乐观锁版本号 ', PRIMARY KEY (id));
- 添加测试数据
INSERT INTO product (id, NAME, price) VALUES (1, '外星人笔记本 ', 100);
- 删除 mybatis_plus 库中 product 表:
use mybatis_plus; DROP TABLE IF EXISTS product;
- 创建数据库 mybatis_plus_1 和表 product
-
引入依赖:
<dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.5.0</version> </dependency>
-
配置多数据源:
- 说明:把之前的数据库连接注释掉
#多数据源 spring: datasource: dynamic: #设置默认的数据库源或者数据源组,默认值即为 master primary: master #严格匹配数据源,默认 false, true 为匹配到指定数据源时抛异常 strict: false datasource: master: url: jdbc:mysql://localhost:3306/mybatis_plus driver-class-name: com.mysql.jdbc.Driver username: root password: root slave_1: url: jdbc:mysql://localhost:3306/mybatis_plus_1 driver-class-name: com.mysql.jdbc.Driver username: root password: root
- 说明:把之前的数据库连接注释掉
-
创建用户 service:
public interface UserService extends IService<User> { }
@Service @DS("master") //指定所操作的数据源 public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { }
-
创建商品 service:
public interface ProductService extends IService<Package> { }
@Service @DS("slave_1") public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> { }
-
测试:
@Autowired private UserService userService; @Autowired private ProductService productService; @Test public void testDynamicDate(){ System.out.println(userService.getById(1L)); System.out.println(productService.getById(1L)); }