概述
MyBatis-Plus(简称 MP)是 MyBatis 的增强工具,它简化了开发人员对数据库的操作,并提供了代码生成器、分页插件等功能。其中的代码生成器(即逆向工程),能够根据数据库中的表结构自动生成实体类(Entity)、Mapper 接口、Service 层及 Controller 层的基础代码,从而极大地减少了开发初期的手动编码工作量。
逆向工程原理
-
数据库元数据读取:
- MyBatis-Plus 使用 JDBC 提供的
DatabaseMetaData
API 来获取数据库中表和字段的相关信息。通过建立数据库连接,程序可以访问到数据库的元数据,包括表名、列名、数据类型、主键信息等。
- MyBatis-Plus 使用 JDBC 提供的
-
模板引擎:
- 获取到必要的数据库信息后,MP 使用模板引擎如 FreeMarker 或 Velocity 来拼接出最终的 Java 源代码文件。这些模板文件包含了静态代码片段以及一些动态占位符,后者将在运行时被实际的数据库信息所替换。
-
代码生成策略:
- 用户可以通过配置文件或编程方式指定哪些表需要生成代码、是否覆盖已存在的文件、是否包含注释等细节。此外,还可以定制生成的代码样式,如包路径、类名前缀/后缀等。
-
自定义模板:
- 开发者可以根据项目的具体要求调整生成代码的格式和内容,通过修改模板来确保生成的代码符合特定的编码规范或框架特性。
-
代码生成执行:
- 当所有配置设置完毕并选择了合适的模板之后,MP 就会开始执行代码生成功能,将生成的源代码写入到指定的位置。
如何使用 MyBatis-Plus 逆向工程
-
引入依赖:
在项目中添加 MyBatis-Plus Generator 和模板引擎(例如 FreeMarker 或 Velocity)的 Maven 依赖。<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.0.5</version> </dependency> <dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.23</version> </dependency>
-
准备模板文件:
创建模板文件夹并在其中放置 FTL(FreeMarker Template Language)模板文件,用于定义生成代码的格式。比如,在%{user_home}\template\ftl\
目录下放置 report.ftl 文件。 -
编写配置类:
编写一个配置类来设定数据库连接参数、选择要生成代码的表、指定输出目录等。 -
编写代码生成逻辑:
在代码中调用 MyBatis-Plus 提供的 API 进行代码生成。以下是一个简单的例子:public class CodeGenerator {public static void main(String[] args) {// 创建代码生成器对象AutoGenerator mpg = new AutoGenerator();// 设置全局配置GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty("user.dir");gc.setOutputDir(projectPath + "/src/main/java");gc.setAuthor("图灵学院电商VIP");gc.setOpen(false);mpg.setGlobalConfig(gc);// 设置数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql://localhost:3306/genserver?serverTimezone=GMT%2B8&characterEncoding=utf-8&autoReconnect=true");dsc.setDriverName("com.mysql.cj.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("root");mpg.setDataSource(dsc);// 设置包配置PackageConfig pc = new PackageConfig();pc.setParent("com.tuling");mpg.setPackageInfo(pc);// 配置模板TemplateConfig templateConfig = new TemplateConfig();templateConfig.setController("/templates/controller.java");mpg.setTemplate(templateConfig);// 策略配置StrategyConfig strategy = new StrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);strategy.setEntityLombokModel(true);strategy.setRestControllerStyle(true);strategy.setInclude("black_info"); // 设置要生成代码的表名mpg.setStrategy(strategy);// 执行代码生成mpg.execute();} }
-
运行代码生成器:
编译并运行你的代码生成器类,MyBatis-Plus 将按照你设定的规则自动为你生成所需的代码。
结论
MyBatis-Plus 的逆向工程是一个强大的工具,它不仅简化了 CRUD 操作相关代码的编写,还促进了开发流程的标准化。通过利用数据库元数据和模板引擎技术,它可以快速生成符合项目需求的基础代码,让开发者能够更专注于业务逻辑的实现。随着项目的复杂度增加,这样的工具可以帮助团队保持代码的一致性和可维护性。