逆向工程(Reverse Engineering)是指从数据库表自动生成代码(如 Java 实体类、Mapper、Service、Controller 等),从而减少重复编码工作,提高开发效率。在 MyBatis-Plus 中,逆向工程通常利用 AutoGenerator 自动生成代码。
使用 MyBatis-Plus AutoGenerator 可以自动生成:
MyBatis-Plus 提供的 AutoGenerator 主要包含以下核心组件:
组件 | 作用 |
---|---|
DataSourceConfig | 数据库配置(如 URL、用户名、密码) |
GlobalConfig | 全局配置(如代码生成目录、是否覆盖文件) |
PackageConfig | 包结构配置(如 com.example.mapper 、service ) |
StrategyConfig | 代码生成策略(如表名前缀、是否使用 Lombok) |
TemplateConfig | 代码模板(可以自定义代码生成方式) |
t_user
表:
CREATE TABLE t_user (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(100) NOT NULL,
email VARCHAR(100),
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
public class CodeGenerator {
public static void main(String[] args) {
// 1. 创建代码生成器
AutoGenerator generator = new AutoGenerator();
// 2. 设置数据源
generator.setDataSource(new DataSourceConfig.Builder(
"jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC",
"root",
"password")
.build());
// 3. 设置全局配置
GlobalConfig globalConfig = new GlobalConfig.Builder()
.outputDir(System.getProperty("user.dir") + "/src/main/java") // 代码输出路径
.author("YourName") // 作者
.disableOpenDir() // 生成后不打开文件夹
.enableSwagger() // 生成 Swagger 注解
.build();
generator.global(globalConfig);
// 4. 设置包名配置
PackageConfig packageConfig = new PackageConfig.Builder()
.parent("com.example") // 父包名
.moduleName("user") // 模块名
.build();
generator.packageInfo(packageConfig);
// 5. 策略配置(指定要生成的表)
StrategyConfig strategyConfig = new StrategyConfig.Builder()
.addInclude("t_user") // 只生成 t_user 表的代码
.entityBuilder().enableLombok() // 开启 Lombok
.naming(NamingStrategy.underline_to_camel) // 下划线转驼峰
.controllerBuilder().enableRestStyle() // 开启 @RestController
.build();
generator.strategy(strategyConfig);
// 6. 执行代码生成
generator.execute();
}
}
运行上面的代码后,会自动生成以下 Java 代码:
src/main/java/com/example/user/
├── controller/
│ ├── UserController.java // 处理用户相关 API 请求
├── entity/
│ ├── User.java // t_user 对应的实体类
├── mapper/
│ ├── UserMapper.java // MyBatis-Plus 数据访问接口
├── service/
│ ├── IUserService.java // 业务逻辑接口
│ ├── UserServiceImpl.java // 业务逻辑实现
@Data
@TableName("t_user") // 指定表名
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String username;
private String password;
private String email;
private LocalDateTime createTime;
}
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
public interface IUserService extends IService<User> {
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
}
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService userService;
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getById(id);
}
}
POJO、Mapper、Service、Controller
,避免手写代码。