MyBatis-Plus逆向工程
1. 逆向工程
逆向工程(Reverse Engineering)是指从数据库表自动生成代码(如 Java 实体类、Mapper、Service、Controller 等),从而减少重复编码工作,提高开发效率。在 MyBatis-Plus 中,逆向工程通常利用 AutoGenerator 自动生成代码。
2. 逆向工程的作用
使用 MyBatis-Plus AutoGenerator 可以自动生成:
- POJO(实体类):与数据库表一一对应的 Java 类。
- Mapper 接口:用于数据库操作的接口。
- XML 文件(可选):MyBatis 的 SQL 语句映射文件。
- Service 层:业务逻辑层接口和实现类。
- Controller 层:用于处理前端请求的控制器。
3. 逆向工程的核心组件
MyBatis-Plus 提供的 AutoGenerator 主要包含以下核心组件:
组件 | 作用 |
---|---|
DataSourceConfig | 数据库配置(如 URL、用户名、密码) |
GlobalConfig | 全局配置(如代码生成目录、是否覆盖文件) |
PackageConfig | 包结构配置(如 com.example.mapper 、service ) |
StrategyConfig | 代码生成策略(如表名前缀、是否使用 Lombok) |
TemplateConfig | 代码模板(可以自定义代码生成方式) |
4. 代码示例
数据库表
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
);
Java 逆向工程代码
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();
}
}
5. 代码生成后结构
运行上面的代码后,会自动生成以下 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 // 业务逻辑实现
POJO(实体类)
@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 接口
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
Service 层
public interface IUserService extends IService<User> {
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
}
Controller 层
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService userService;
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getById(id);
}
}
6. 逆向工程的优势
- 减少重复工作:自动生成
POJO、Mapper、Service、Controller
,避免手写代码。 - 保证代码一致性:所有表的代码结构一致,不会因手写导致格式不统一。
- 提高开发效率:数据库表更新时,只需重新运行 AutoGenerator,自动生成新代码。
- 降低维护成本:项目维护时,可直接使用 MyBatis-Plus 进行 CRUD 操作,无需额外编写 SQL。