MybatisPlus-Generator

文章目录

一、前言

本文将详细介绍mybatisplus-generator的相关使用,mybatisplus-generator是 MyBatis Plus 框架中的一个代码生成工具,它能够自动生成与数据库表对应的 Java 实体类、Mapper 接口以及 XML 配置文件。它的出现极大地提高了开发效率,让开发者能够将更多的精力集中在业务逻辑上,而不是繁琐的 CRUD 操作上。

二、MybatisPlus代码生成器

使用mybatisplus-generator可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

1、引入依赖

博客这里使用的是.vm模板引擎,所以需要手动引入velocity的依赖;

xml 复制代码
<!-- velocity -->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.0</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.1</version>
</dependency>

2、编写生成代码

以下是mybatisplus官方提供的可交互是的代码生成的例子:

java 复制代码
public class MyBatisPlusGenerator {
    // 处理 all 情况
    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }

    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/mengjie", "root", "123456")
                // 全局配置
                .globalConfig((scanner, builder) -> {
                    builder.author(scanner.apply("请输入作者名称?")).fileOverride();
                    builder.enableSwagger();
                    builder.outputDir("E:\\study\\SpringCloud\\mybatisplus\\src\\main\\java");
                })
                // 包配置
                .packageConfig((scanner, builder) -> {
                    builder.parent(scanner.apply("请输入包名?"));
                })
                // 策略配置
                .strategyConfig((scanner, builder) -> {
                    builder.addInclude(MyBatisPlusGenerator.getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))
                            .controllerBuilder().enableRestStyle().enableHyphenStyle().build();
                    builder.serviceBuilder()
                            .formatServiceFileName("%sService")
                            .formatServiceImplFileName("%sServiceImp")
                            .build();
                    //entity的策略配置
                    builder.entityBuilder()
                            .enableLombok()
                            .enableTableFieldAnnotation()
                            .versionColumnName("version")
                            .logicDeleteColumnName("is_delete")
                            .columnNaming(NamingStrategy.underline_to_camel)
                            .idType(IdType.ASSIGN_ID)
                            .formatFileName("%sEntity")
                            .build();
                })
                .execute();
    }
}

3、配置说明

3.1、全局配置(GlobalConfig)

java 复制代码
new GlobalConfig.Builder()
    .fileOverride()
    .outputDir("")//输出目录
    .author("wmj")
    .enableKotlin()
    .enableSwagger()
    .dateType(DateType.TIME_PACK)
    .commentDate("yyyy-MM-dd")
    .build();

3.2、包配置(PackageConfig)

java 复制代码
new PackageConfig.Builder()
    .moduleName("sys")
    .entity("po")
    .service("service")
    .serviceImpl("service.impl")
    .mapper("mapper")
    .xml("mapper.xml")
    .controller("controller")
    .other("other")
    .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://"))
    .build();

3.3、模板配置(TemplateConfig)

java 复制代码
new TemplateConfig.Builder()
    .disable(TemplateType.ENTITY)
    .entity("/templates/entity.java")
    .service("/templates/service.java")
    .serviceImpl("/templates/serviceImpl.java")
    .mapper("/templates/mapper.java")
    .mapperXml("/templates/mapper.xml")
    .controller("/templates/controller.java")
    .build();

3.4、策略配置(StrategyConfig)

java 复制代码
new StrategyConfig.Builder()
    .enableCapitalMode()
    .enableSkipView()
    .disableSqlFilter()
    .likeTable(new LikeTable("USER"))
    .addInclude("t_simple")
    .addTablePrefix("t_", "c_")
    .addFieldSuffix("_flag")
    .build();

3.4.1、Entity 策略配置

java 复制代码
new StrategyConfig.Builder()
    .entityBuilder()
    .superClass(BaseEntity.class)
    .disableSerialVersionUID()
    .enableChainModel()
    .enableLombok()
    .enableRemoveIsPrefix()
    .enableTableFieldAnnotation()
    .enableActiveRecord()
    .versionColumnName("version")
    //.versionPropertyName("version") 
    .logicDeleteColumnName("deleted")
    //.logicDeletePropertyName("deleteFlag")
    .naming(NamingStrategy.no_change)
    .columnNaming(NamingStrategy.underline_to_camel)
    .addSuperEntityColumns("id", "created_by", "created_time", "updated_by", "updated_time")
    .addIgnoreColumns("age")
    .addTableFills(new Column("create_time", FieldFill.INSERT))
    .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
    .idType(IdType.AUTO)
    .formatFileName("%sEntity")
    .build();

3.4.2、Controller 策略配置

java 复制代码
new StrategyConfig.Builder()
    .controllerBuilder()
    .superClass(BaseController.class)
    .enableHyphenStyle()
    .enableRestStyle()
    .formatFileName("%sAction")
    .build();

3.4.3、Service 策略配置

java 复制代码
new StrategyConfig.Builder()
    .serviceBuilder()
    .superServiceClass(BaseService.class)
    .superServiceImplClass(BaseServiceImpl.class)
    .formatServiceFileName("%sService")
    .formatServiceImplFileName("%sServiceImp")
    .build();

4、示例演示

生成前的目录结构:

4.1、进行代码生成:

这里我们可以选择指定表生成也可以直接选择所有表生成;

4.2、生成结果

可以看到生成后的项目结构:

三、总结

  • 提高开发效率: MyBatis Plus Generator 可以根据数据库表结构自动生成大部分的代码,从而减少了开发人员手动编写重复性代码的工作量,提高了开发效率。
  • 代码一致性: 自动生成的代码保证了实体类、Mapper 接口和 XML 配置文件之间的一致性,避免了由于手动编写而引入的错误。
  • 易于维护: 由于代码是自动生成的,所以当数据库表结构发生变化时,只需重新运行生成器即可更新代码,减少了手动修改代码的工作。
  • 支持多种模板引擎: MyBatis Plus Generator 支持多种模板引擎,开发者可以根据自己的偏好选择合适的模板引擎来生成代码。
  • 灵活的配置: 生成器提供了丰富的配置选项,可以根据项目需求进行灵活的配置,包括表名、字段名的映射规则、生成的文件路径等。
  • 支持自定义扩展: 除了自动生成基本的代码外,开发者还可以通过编写插件来扩展生成器的功能,满足特定的项目需求。
相关推荐
码农派大星。7 天前
MyBatis-Plus快速上手
java·spring·mybatis·mybatisplus
命运之手1 个月前
【Coroutines】Implement Python Generator by Kotlin Coroutines
python·kotlin·generator·coroutine
郭天宇 abfore1 个月前
MybatisPlus
java·mybatis·mybatisplus·1024程序员节
我的程序快快跑啊1 个月前
MyBatisPlus:常见注解
java·mybatisplus
haloYml1 个月前
mybatisplus的查询,分页查询,自定义多表查询,修改的几种写法
mybatisplus
胡耀超2 个月前
1.分页查询(后端)—— Vue3 + SpringCloud 5 + MyBatisPlus + MySQL 项目系列(基于 Zulu 11)
mysql·spring·spring cloud·mybatis·mybatisplus·zulu11
子非鱼9212 个月前
【前端】ES6:Promise对象和Generator函数
前端·javascript·es6·promise·generator
u0100559603 个月前
IPage类与Page类区别和作用讲解
mybatis·mybatisplus
大飞哥~BigFei3 个月前
mybatisPlus的@TableLogic逻辑删除注解导致联合索引失效的坑
mysql·mybatisplus
装不满的克莱因瓶3 个月前
你真的懂Mybatis分页原理吗?
java·开发语言·架构·mybatis·mybatisplus·mybatis-plus·分页