当前位置: 首页 > news >正文

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.mapperservice
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。

相关文章:

  • ORM框架
  • SQL Server安装后 SSMS 无法连接:身份验证模式错误
  • 可编辑36页PPT | “新基建”在数字化智慧高速公路中的支撑应用方案智慧高速解决方案智慧交通方案
  • 《C奥林匹斯宝典:基础篇 - 重载函数》
  • 机器人传感器系统---时间戳对齐
  • vue使用markdown-it-katex部分公式展示不正确 katex版本低
  • 深度学习--softmax回归
  • 基于TradingView和CTPBee的自动化期货交易系统实现
  • Saas产品性能优化实战
  • bluecode-字符替换与最长子串问题
  • 【开题报告+论文+源码】基于SpringBoot+Vue的乡村公共资源管理系统
  • VS Code查看html格式文件插件:Live Server、HTML Preview
  • 多个SVN版本库,共用同一个和密码配置文件
  • Nacos 配置信息的发布流程是怎样的?服务端是如何校验和处理这些信息的?
  • 什么是SAQ评级?SAQ评级的好处?SAQ评级的意义
  • 第七章:OSPF
  • Stable Diffusion|Ai赋能电商 Inpaint Anything
  • ideal自动生成类图的方法
  • 锁策略--
  • 【Unity网络编程知识】FTP学习
  • 多个“首次”!上市公司重大资产重组新规落地
  • 海昏侯博物馆展览上新,“西汉帝陵文化展”将持续展出3个月
  • 终于,俄罗斯和乌克兰谈上了
  • 上百家单位展示AI+教育的实践与成果,上海教育博览会开幕
  • 病重老人取钱在银行门口去世,家属:已协商一致
  • 临港新片区将新设5亿元启航基金:专门投向在临港发展的种子期、初创型企业