文章目录
- Mybatis Generator自动化生成代码
- MyBatis Generator概述
- 使用Java代码形式
- 1. 在 Maven 或 Gradle 中添加 MyBatis Generator 的依赖:
- 2. 编写配置文件 GeneratorConfig.xml,配置需要生成的数据库表和对应的生成器:
- 3. 在命令行中使用 MyBatis Generator 进行代码生成:
- 使用Maven插件
- pom.xml中添加依赖
- pom.xml中build-plugins下添加插件
- mybatis-generator-config.xml
- 运行
- MyBatis-Plus 的 AutoGenerator
- MyBatis-Plus AutoGenerator概述
- 1. 在 Maven 或 Gradle 中添加 MyBatis-Plus 的依赖:
- 2. 配置数据源和 MyBatis-Plus 的相关配置:
- 3. 编写配置文件 MybatisPlusConfig.java,配置自动生成代码的相关信息:
- 4. 在启动类中调用 AutoGenerator 的 run 方法即可进行代码生成:
- 两者对比
- 总结
自动化生成代码是现在一种非常常见的技术,它可以大大提高开发效率,减少重复劳动。而在 Java 开发中,MyBatis 是一个非常流行的 ORM 框架,而其中的 Generator 和 MyBatis-Plus 中的 AutoGenerator 是两个非常好用的自动化代码生成工具,下面我们来分别介绍一下它们的使用。
Mybatis Generator自动化生成代码
MyBatis Generator概述
MyBatis Generator 是 MyBatis 框架提供的一个自动生成代码的工具,它能够根据数据库中的表自动生成对应的 POJO、Mapper 接口和 XML 配置文件,同时也支持自定义插件的开发。使用 MyBatis Generator 的步骤如下:
使用Java代码形式
1. 在 Maven 或 Gradle 中添加 MyBatis Generator 的依赖:
<dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.4.0</version>
</dependency>
2. 编写配置文件 GeneratorConfig.xml,配置需要生成的数据库表和对应的生成器:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><context id="testTables" targetRuntime="MyBatis3"><plugin type="org.mybatis.generator.plugins.SerializablePlugin" /><commentGenerator><property name="suppressAllComments" value="true" /></commentGenerator><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/test"userId="root"password="root" /><javaTypeResolver><property name="forceBigDecimals" value="false" /></javaTypeResolver><javaModelGenerator targetPackage="com.example.pojo"targetProject="src/main/java"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" /></javaModelGenerator><sqlMapGenerator targetPackage="com.example.mapper"targetProject="src/main/resources"><property name="enableSubPackages" value="true" /></sqlMapGenerator><javaClientGenerator type="XMLMAPPER"targetPackage="com.example.mapper"targetProject="src/main/java"><property name="enableSubPackages" value="true" /></javaClientGenerator><table tableName="tb_user" domainObjectName="User"enableCountByExample="false" enableUpdateByExample="false"enableDeleteByExample="false" enableSelectByExample="false"selectByExampleQueryId="false" /></context>
</generatorConfiguration>
3. 在命令行中使用 MyBatis Generator 进行代码生成:
java -jar mybatis-generator-core-1.4.0.jar -configfile GeneratorConfig.xml -overwrite
这样就会在指定的包路径和项目路径下生成对应的 POJO、Mapper 接口和 XML 配置文件。但编写代码还需要配置一些信息,也挺麻烦哈,偷个懒吧再,使用Maven 插件帮咱们干活。
使用Maven插件
pom.xml中添加依赖
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version>
</dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>
pom.xml中build-plugins下添加插件
添加了插件后,我们使用 configurationFile 元素来指定一个配置文件 mybatis-generator-config.xml
而且数据库表可能会发生变动,因此我们需要追加一个配置 <overwrite>true</overwrite>
,允许覆盖旧的文件。为了防止我们编写的 SQL 语句被覆盖掉,MyBatis Generator 只会覆盖旧的 po、dao、而 *mapper.xml 不会覆盖,而是追加。
<!-- MyBatis Generator 插件 -->
<plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.7</version><configuration><!-- MyBatis Generator 生成器的配置文件--><configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile><!-- 允许覆盖生成的文件,确定骨架代码后就可以设为 false 了,免得覆盖原有代码 --><overwrite>true</overwrite><!-- 将当前 pom 的依赖项添加到生成器的类路径中--><includeCompileDependencies>true</includeCompileDependencies></configuration>
</plugin>
结构如下图:
mybatis-generator-config.xml
<generatorConfiguration><context id="myContext" targetRuntime="MyBatis3" defaultModelType="flat"><!-- 注释 --><commentGenerator><!-- 是否不生成注释 --><property name="suppressAllComments" value="true"/></commentGenerator><!-- jdbc连接 --><jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false"userId="root"password="1234"></jdbcConnection><!-- 类型转换 --><javaTypeResolver><!--是否使用bigDecimal,默认false。false:把JDBC DECIMAL 和 NUMERIC 类型解析为 Integertrue:把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal--><property name="forceBigDecimals" value="true"/></javaTypeResolver><!-- 生成实体类地址 --><javaModelGenerator targetPackage="com.example.pojo" targetProject="src/main/java"><!-- 是否针对string类型的字段在set方法中进行修剪,默认false --><property name="trimStrings" value="true"/></javaModelGenerator><!-- 生成Mapper.xml文件 --><sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"></sqlMapGenerator><!-- 生成 XxxMapper.java 接口--><javaClientGenerator targetPackage="com.example.mapper" targetProject="src/main/java" type="XMLMAPPER"><property name="enableSubPackages" value="true" /></javaClientGenerator><!-- schema为数据库名,oracle需要配置,mysql不需要配置。tableName为对应的数据库表名domainObjectName 是要生成的实体类名(可以不指定,默认按帕斯卡命名法将表名转换成类名)enableXXXByExample 默认为 true, 为 true 会生成一个对应Example帮助类,帮助你进行条件查询,不想要可以设为false--><table schema="" tableName="posts" domainObjectName="Posts"enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false"enableUpdateByExample="false" selectByExampleQueryId="false"></table></context>
</generatorConfiguration>
运行
MyBatis-Plus 的 AutoGenerator
MyBatis-Plus AutoGenerator概述
MyBatis-Plus 是在 MyBatis 的基础上扩展了一些功能的框架,其中 AutoGenerator 就是 MyBatis-Plus 提供的自动生成代码的工具,它能够一键生成对应的 POJO、Mapper 接口和 XML 配置文件,并且还支持模板引擎的自定义。
使用 MyBatis-Plus AutoGenerator 的步骤如下:
1. 在 Maven 或 Gradle 中添加 MyBatis-Plus 的依赖:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1</version>
</dependency>
2. 配置数据源和 MyBatis-Plus 的相关配置:
spring:datasource:url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTCusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Drivermybatis-plus:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.example.pojoglobal-config:db-config:id-type: auto
3. 编写配置文件 MybatisPlusConfig.java,配置自动生成代码的相关信息:
@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}@Beanpublic MybatisPlusPropertiesCustomizer plusPropertiesCustomizer() {return plusProperties -> plusProperties.getGlobalConfig().setBanner(false);}@Beanpublic AutoGenerator autoGenerator(DataSource dataSource) {AutoGenerator autoGenerator = new AutoGenerator();autoGenerator.setDataSource(dataSource);// 全局配置GlobalConfig globalConfig = new GlobalConfig();globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java");globalConfig.setAuthor("mybatis-plus");globalConfig.setFileOverride(true);globalConfig.setOpen(false);globalConfig.setEntityName("%sDO");autoGenerator.setGlobalConfig(globalConfig);// 数据库表配置StrategyConfig strategyConfig = new StrategyConfig();strategyConfig.setNaming(NamingStrategy.underline_to_camel);strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);strategyConfig.setEntityLombokModel(true);strategyConfig.setRestControllerStyle(true);strategyConfig.setControllerMappingHyphenStyle(true);strategyConfig.setInclude("tb_user");// 包配置PackageConfig packageConfig = new PackageConfig();packageConfig.setParent("com.example");packageConfig.setEntity("pojo");packageConfig.setMapper("mapper");packageConfig.setXml("mapper");// 模板引擎配置TemplateConfig templateConfig = new TemplateConfig();// 自定义模板配置,可以根据自己的需求进行修改templateConfig.setService("/templates/service.vm");templateConfig.setServiceImpl("/templates/serviceImpl.vm");templateConfig.setEntity("/templates/entity.vm");templateConfig.setMapper("/templates/mapper.vm");templateConfig.setXml("/templates/mapperXml.vm");autoGenerator.setTemplate(templateConfig);autoGenerator.setPackageInfo(packageConfig);autoGenerator.setStrategy(strategyConfig);return autoGenerator;}
}
4. 在启动类中调用 AutoGenerator 的 run 方法即可进行代码生成:
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);AutoGenerator autoGenerator = (AutoGenerator) ApplicationContextUtils.getBean("autoGenerator");autoGenerator.execute();}
}
这样就可以在指定的包路径和项目路径下生成对应的 POJO、Mapper 接口和 XML 配置文件。
两者对比
维度 | MyBatis Generator | MyBatis-Plus AutoGenerator |
---|---|---|
依赖配置 | 需要添加 MyBatis Generator 的单独依赖 | 需要添加 MyBatis-Plus 的整体依赖 |
配置文件 | 需要编写 GeneratorConfig.xml 配置文件 | 不需要额外的配置文件 |
支持数据库 | 支持主流的关系型数据库(如 MySQL、Oracle 等) | 支持主流的关系型数据库(如 MySQL、Oracle 等) |
可生成内容 | POJO、Mapper 接口和 XML 配置文件 | POJO、Mapper 接口和 XML 配置文件 |
插件支持 | 支持自定义插件开发 | 支持使用 MyBatis-Plus 内置的插件 |
模板引擎支持 | 不支持模板引擎 | 支持使用模板引擎进行自定义 |
配置灵活性 | 配置项较多,灵活度高 | 配置项较少,但使用起来更加简便 |
兼容性 | 对于 MyBatis 的版本兼容性较好 | 需要与 MyBatis-Plus 版本配套使用 |
社区支持和文档资料数 | 社区支持较好,文档资料丰富 | 社区支持较好,但文档资料数目相对较少 |
综上所述,MyBatis Generator 和 MyBatis-Plus AutoGenerator 都是非常好用的自动化代码生成工具,根据项目需求的不同,我们可以选择适合自己的工具来进行开发。MyBatis Generator 配置灵活度较高,可以根据需要进行自定义插件的开发,但需要编写较多的配置文件,而 MyBatis-Plus AutoGenerator 则更加简便,支持模板引擎的自定义,但配置项较少。
总结
以上就是 MyBatis Generator 和 MyBatis-Plus AutoGenerator 两个自动化代码生成工具的使用方法和区别,它们可以大大提升开发效率,减少重复劳动。在实际开发中,我们可以根据项目的需求选择合适的工具进行使用。