一、代码生成器
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. 代码生成器配置详解
代码生成器的核心配置包括:
- 全局配置:设置输出目录、作者信息等
- 数据源配置:连接数据库的信息
- 包配置:设置生成的代码包结构
- 策略配置:命名策略、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. 多数据源应用场景
在实际项目中,我们经常会遇到以下场景需要使用多数据源:
- 分库分表:数据量大的情况下,将数据分散到不同的数据库
- 读写分离:主库负责写操作,从库负责读操作
- 多租户:不同租户使用不同的数据库
- 多业务模块:不同业务模块使用独立的数据库
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. 多数据源使用注意事项
- 事务管理:跨数据源的事务需要使用分布式事务解决方案
- 性能考虑:避免在单个请求中频繁切换数据源
- 连接池配置:根据实际情况配置合适的连接池参数
- 动态切换:可以通过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, "商品查询失败");
}
}
三、总结
-
代码生成器可以极大提高开发效率,自动生成各层基础代码
-
多数据源配置简单灵活,适用于多种业务场景
-
结合两者可以快速构建基于MyBatis-Plus的多数据源项目
通过合理使用这些功能,可以显著减少重复代码编写,提高开发效率,让开发者更专注于业务逻辑的实现。