栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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);
}

代码生成器
  • 引入相关依赖

    com.baomidou
    mybatis-plus-generator
    3.5.1


    org.freemarker
    freemarker
    2.3.31

  • 快速生成
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` ;
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;
  • 引入依赖

    com.baomidou
    dynamic-datasource-spring-boot-starter
    3.5.0

  • 配置多数据源

说明:注释掉之前的数据库连接,添加新配置

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 {
}
@DS("master") //指定所操作的数据源
@Service
public class UserServiceImpl extends ServiceImpl implements
UserService {
}
  • 创建商品service以及mapper
public interface ProductService extends IService {
}
@DS("slave_1")
@Service
public class ProductServiceImpl extends ServiceImpl
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)https://baomidou.com/pages/ba5b24/#%E5%8A%9F%E8%83%BD

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027629.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号