MyBatisPlus(四)代码生成器与多数据源

一、代码生成器

1. 代码生成器概述

MyBatis-Plus提供了强大的代码生成器功能,可以快速生成Entity、Mapper、Service、Controller等各层代码,极大提高开发效率。

2. 引入依赖

首先需要在项目中添加代码生成器相关依赖:

<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>

3. 代码生成器配置详解

代码生成器的核心配置包括:

  1. ​全局配置​​:设置输出目录、作者信息等
  2. ​数据源配置​​:连接数据库的信息
  3. ​包配置​​:设置生成的代码包结构
  4. ​策略配置​​:命名策略、Lombok支持等
public class CodeGenerator {
    public static void main(String[] args) {
        // 初始化代码生成器
        AutoGenerator generator = new AutoGenerator();
        
        // 全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
        globalConfig.setAuthor("作者名");
        globalConfig.setOpen(false); // 生成后不打开文件夹
        generator.setGlobalConfig(globalConfig);
        
        // 数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mybatis_plus");
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("123456");
        generator.setDataSource(dataSourceConfig);
        
        // 包配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.example.mybatisplus"); // 父包名
        packageConfig.setEntity("entity"); // 实体类包名
        packageConfig.setMapper("mapper"); // Mapper接口包名
        packageConfig.setService("service"); // Service接口包名
        packageConfig.setServiceImpl("service.impl"); // Service实现类包名
        packageConfig.setController("controller"); // Controller包名
        generator.setPackageInfo(packageConfig);
        
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel); // 数据库表字段转实体类属性命名策略
        strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 数据库表字段转实体类属性命名策略
        strategy.setEntityLombokModel(true); // 使用Lombok
        strategy.setRestControllerStyle(true); // 生成@RestController控制器
        strategy.setInclude("user", "product"); // 需要生成的表名
        generator.setStrategy(strategy);
        
        // 执行生成
        generator.execute();
    }
}

4. 生成结果说明

执行代码生成器后,会在指定包路径下生成以下内容:

  • entity包:包含与数据库表对应的实体类
  • mapper包:包含基础的Mapper接口
  • service包:包含Service接口及实现类
  • controller包:包含基础的Controller类

二、多数据源配置

1. 多数据源应用场景

在实际项目中,我们经常会遇到以下场景需要使用多数据源:

  1. ​分库分表​​:数据量大的情况下,将数据分散到不同的数据库
  2. ​读写分离​​:主库负责写操作,从库负责读操作
  3. ​多租户​​:不同租户使用不同的数据库
  4. ​多业务模块​​:不同业务模块使用独立的数据库

2. 配置步骤

        2.1 引入依赖
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.5.0</version>
</dependency>
        2.2 数据源配置详解

spring:
  datasource:
    dynamic:
      primary: master # 设置默认数据源
      strict: false # 是否严格匹配数据源
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/mybatis_plus
          driver-class-name: com.mysql.cj.jdbc.Driver
          username: root
          password: 123456
        slave_1:
          url: jdbc:mysql://localhost:3306/mybatis_plus_1
          driver-class-name: com.mysql.cj.jdbc.Driver
          username: root
          password: 123456

        2.3 服务层实现
// 用户Service - 使用master数据源
@DS("master") // 指定数据源
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> 
    implements UserService {
    // 业务方法实现
}

// 商品Service - 使用slave_1数据源
@DS("slave_1") // 指定数据源
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> 
    implements ProductService {
    // 业务方法实现
}

3. 多数据源使用注意事项

  1. ​事务管理​​:跨数据源的事务需要使用分布式事务解决方案
  2. ​性能考虑​​:避免在单个请求中频繁切换数据源
  3. ​连接池配置​​:根据实际情况配置合适的连接池参数
  4. ​动态切换​​:可以通过AOP实现更灵活的数据源切换

4. 测试验证

@SpringBootTest
public class MultiDataSourceTest {
    
    @Autowired
    private UserService userService; // 使用master数据源
    
    @Autowired
    private ProductService productService; // 使用slave_1数据源
    
    @Test
    public void testMultiDataSource() {
        // 从master数据源查询用户
        User user = userService.getById(1L);
        System.out.println("用户信息:" + user);
        
        // 从slave_1数据源查询商品
        Product product = productService.getById(1L);
        System.out.println("商品信息:" + product);
        
        // 验证数据源切换是否成功
        Assert.notNull(user, "用户查询失败");
        Assert.notNull(product, "商品查询失败");
    }
}

三、总结

  1. ​代码生成器​​可以极大提高开发效率,自动生成各层基础代码

  2. ​多数据源​​配置简单灵活,适用于多种业务场景

  3. 结合两者可以快速构建基于MyBatis-Plus的多数据源项目

通过合理使用这些功能,可以显著减少重复代码编写,提高开发效率,让开发者更专注于业务逻辑的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值