MyBatisPlus(七)——通用枚举、代码生成器、多数据源、MyBatisX

目录

通用枚举        

代码生成器

多数据源

MyBatisX


通用枚举        

        当表中的有些字段值是固定的,例如性别(男或女),此时我们可以使用MyBatis-Plus的通用枚举来实现。

  • 在数据库表中添加字段sex

  •  创建通用枚举类型

        我们要想把哪一个属性的值存储到数据库当中,我们就在这个属性上面添加一个注解@EnumValue,将注解所标识的属性的值存储到数据库中。

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;
    }
}
  • 配置扫描通用枚举

        还需要再配置文件当中设置一个扫描通用枚举,只有通过扫描之后让mp知道扫描是谁,这个时候才能够将当前所添加的这个注解的功能来进行解析。

mybatis-plus:
    configuration:
        # 配置MyBatis日志
        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.zqf.mybatisplus.enums

        MP来使用通用枚举的话,只有两个操作,第一个操作我们在枚举中,把某一个属性的值存储到数据库中,直接把这个属性上添加@EnumValue,然后再在配置文件中来扫描咱们的枚举就可以了。

  • 测试
@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);
}

代码生成器

  • 引入相关依赖
<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>
  • 快速生成
package com.zqf.mybatisplus;

import java.util.Collections;

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", "123456")
            .globalConfig(builder -> {
                builder.author("zqf") // 设置作者
                        //.enableSwagger() // 开启 swagger 模式
                        .fileOverride() // 覆盖已生成文件
                        .outputDir("D://mybatis_plus"); // 指定输出目录
            })
            .packageConfig(builder -> {
                builder.parent("com.zqf") // 设置父包名
                        .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();
    }
}

多数据源

        适用于多种场景:纯粹多库(工程中所操作的表分散在不同的数据库当中)、 读写分离(有的数据库专门实现读的功能,有的数据库专门实现写的功能)、 一主多从、 混合模式等。

        我们创建两个库,第一个是我们之前所使用的mybatis_plus,第二个是mybatis_plus1,然后我们把user表放在咱们以前的mybatis_plus中,然后把product表放在mybatis_plus1中,然后这个时候通过MP设置的多数据源之后,来测试一下看能否从这两个数据库中来读取到数据。

  • 创建数据库及表
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;
  • 引入依赖
<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未匹配到指定数据源时抛异常,false使用默认数据源(master)
      strict: false
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf8&useSSL=false
          driver-class-name: com.mysql.cj.jdbc.Driver
          username: root
          password: 123456
        slave_1:
          url: jdbc:mysql://localhost:3306/mybatis_plus_1?characterEncoding=utf8&useSSL=false
          driver-class-name: com.mysql.cj.jdbc.Driver
          username: root
          password: 123456

  • 创建用户service以及mapper接口

通过@DS注解来设置当前的业务逻辑操作的是哪一个数据源

public interface UserService extends IService<User> {
}
@DS("master") //指定所操作的数据源
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements
UserService {
}
  • 创建商品service以及mapper
public interface ProductService extends IService<Product> {
}
@DS("slave_1")
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product>
implements ProductService {
}
  • 测试
@Autowired
private UserService userService;
@Autowired
private ProductService productService;
@Test
public void testDynamicDataSource(){
    System.out.println(userService.getById(1L));
    System.out.println(productService.getById(1L));
}

如果我们实现读写分离,将写操作方法加上主库数据源,读操作方法加上从库数据源

MyBatisX

        MyBatis-Plus为我们提供了强大的mapper和service模板,能够大大的提高开发效率 但是在真正开发过程中,MyBatis-Plus并不能为我们解决所有问题,例如一些复杂的SQL,多表 联查,我们就需要自己去编写代码和SQL语句,这个时候可以使用MyBatisX插件。

        当我们使用了MyBatisX的时候,我们就可以快速的去定位到mapper接口所对应的映射文件以及映射文件所对应的mapper接口。

代码快速生成

  • 连接数据库

  • 生成代码

  •  基础设置

  •  设置mapper接口和映射文件

  •  生成结果

  • 快速生成CRUD

        我们先来生成一个添加的方法,不需要去写返回值,只需要后来写方法名就行,然后我们需要把方法名给写出来,这个时候mybatisx就可以根据方法名快速的帮助我们去生成相对应的sql语句(见面识义)。

 Alt+Enter自动补全方法

        当我们创建一个方法后,mybatisx会把我们当前接口中的方法跟映射文件中的sql进行关联,如果这个接口的方法没有相对应的sql语句的话,它就会直接报错。

映射文件中的sql:

更多例子: 

更多用法:MybatisX快速开发插件 | MyBatis-Plus (baomidou.com)icon-default.png?t=M666https://baomidou.com/pages/ba5b24/#%E5%8A%9F%E8%83%BD

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值