springboot集成mybatis-plus(二)自动生成基础代码篇(基于mybatis-plus3.5.2+版本)


前言

提高开发效率的必备神器mybatis-plus,你值得学一学

一、为啥要使用mybatis-plus3.5.2+版本呢?

由于老版本存在很多问题以及新老版本之间的不兼容、在此重新再发一篇,使用老版本的可以参考老版本的代码生成

二、使用步骤

1.项目pom中引入以下需要的依赖

代码如下:

		<!--mybatis_plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-core</artifactId>
            <version>3.5.2</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

2.编写代码生成类

代码如下:

package com.mybatisplus.generator.util;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;

import java.util.Collections;

public class CodeGenerator {
    public static void main(String[] args) {
        FastAutoGenerator.create(
                new DataSourceConfig
                        // 数据库连接地址
                        .Builder("jdbc:mysql://127.0.0.1:3306/test",
                        // 用户名
                        "root",
                        // 密码
                        "root")
                        // 设置数据库类型
                .dbQuery(new MySqlQuery())
                        // 数据库名
                .schema("test")
                        // 类型转换这里是mysql,选择自己使用的数据库对应的转换类就可以
                .typeConvert(new MySqlTypeConvert())
                        // 数据库关键词处理
                .keyWordsHandler(new MySqlKeyWordsHandler())
                )
                .globalConfig(builder -> {
                    // 设置作者
                    builder.author("wutt")
                            // 开启 swagger 模式
//                            .enableSwagger()
                            // 覆盖已生成文件,3.5.3会被删除,不建议使用
                            .fileOverride()
                            //禁止打开输出目录
                            .disableOpenDir()
                            // 指定输出目录
                            .outputDir(getBasePath() + "/src/main/java");
                }).strategyConfig(builder -> {
                    // 去除的表前缀,默认生成所有表对应的实体
                    builder.addTablePrefix("t_")
                            // 添加需要生成实体的表名
//                            .addInclude("t_user")
                            // 添加不需要生成实体的表名
//                            .addExclude("t_user")

                            // 控制器controller配置
                            .controllerBuilder()
                            // 开启生成@RestController 控制器
                            .enableRestStyle()
                            // 开启驼峰转连字符
                            .enableHyphenStyle()
                            // 开启父类
//                            .superClass("com.mybatisplus.generator.controller.BaseController")
                            // 控制器统一后缀
                            .formatFileName("%sController")

                            // service配置
                            .serviceBuilder()
                            // service统一后缀
                            .formatServiceFileName("%sService")
                            // serviceImpl统一后缀
                            .formatServiceImplFileName("%sServiceImpl")

                            //mapper配置
                            .mapperBuilder()
                            // 生成基础字段的map映射map
                            .enableBaseResultMap()
                            // 生成基础查询的sql
                            .enableBaseColumnList()

                            // 实体类配置
                            .entityBuilder()
                            // 开启链式模型,开启lombok模型不需要开启这个
//                            .enableChainModel()
                            // 开启lombok模型
//                            .enableLombok()
                            // 开启表字段注解
                            .enableTableFieldAnnotation()
                            // 逻辑删除字段
                            .logicDeleteColumnName("is_deleted")
                            // 数据库表映射到实体的命名策略
                            .naming(NamingStrategy.underline_to_camel)
                            // 数据库表字段映射到实体的命名策略,驼峰命名,这个未设置会按照naming来配置
//                            .columnNaming(NamingStrategy.underline_to_camel)
                            // 指定实体类父类
//                            .superClass("com.mybatisplus.generator.entity.BaseEntity")
                            // 父类字段
//                            .addSuperEntityColumns("id", "create_id", "modify_id", "create_date", "modify_date", "is_deleted")
//                             开启 ActiveRecord 模式,即实体类继承Model类,自己提供CRUD操作,不建议使用,会和父类形成单继承冲突
//                            .enableActiveRecord()
                            // 表字段填充字段,对应数据库字段,插入的时候自动填充
                            .addTableFills(new Column("create_date", FieldFill.INSERT))
                            // 表字段填充字段,对应实体类字段,插入的时候自动填充
                            .addTableFills(new Property("createDate", FieldFill.INSERT))
                            // 表字段填充字段,对应数据库字段,更新的时候自动填充
                            .addTableFills(new Column("modify_date", FieldFill.UPDATE))
                            // 表字段填充字段,对应实体类字段,更新的时候自动填充
                            .addTableFills(new Property("modifyDate", FieldFill.UPDATE))
                            // 忽略的字段
//                            .addIgnoreColumns("version")
                            // id自增
                            .idType(IdType.AUTO)
                            // 实体类统一后缀
                            .formatFileName("%sEntity");

                })
                .packageConfig(builder -> {
                            // 设置父包名
                    builder.parent("com.mybatisplus.generator")
                            // 设置父包模块名
//                            .moduleName("test")
                            //设置entity包名
                            .entity("entity")
                            // 设置service包名
                            .service("service")
                            // 设置serviceImpl包名
                            .serviceImpl("service.impl")
                            // 指定mapper.xml生成的路径
                            .pathInfo(Collections.singletonMap(OutputFile.xml, getBasePath() + "/src/main/resources/mapper")); // 设置mapperXml生成路径
                }
                ).execute();
    }

    /**
     * 获取当前项目的输出路径
     * @return 当前项目的输出路径
     */
    public static String getBasePath(){
        return System.getProperty("user.dir");
    }
}


运行下该类的main方法,最后项目结构下的所有目录及类都生成了

在这里插入图片描述


总结

那么恭喜你,代码生成所有的都完成了,接下来就可以愉快的开发你的业务了

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MyBatis-Plus是一个MyBatis的增强工具,在MyBatis基础上进行了扩展,提供了更加便捷的CRUD操作、分页、乐观锁、逻辑删除等功能。而MyBatis-Plus代码生成器则是MyBatis-Plus中的一个子模块,用于生成基于MyBatis-Plus的CRUD代码MyBatis-Plus代码生成器是一个基于Velocity模板引擎的代码生成器,支持生成Java、XML、SQL脚本等文件。使用MyBatis-Plus代码生成器可以快速生成CRUD代码,减少手动编写代码的工作量。 下面是使用MyBatis-Plus3.5.2代码生成器生成代码的步骤: 1. 添加MyBatis-Plus的依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.2</version> </dependency> ``` 2. 编写代码生成器配置文件 在src/main/resources目录下创建generator.properties文件,编写代码生成器的配置信息,例如: ```properties # 数据库配置 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 jdbc.username=root jdbc.password=root # 代码生成器配置 outputDir=D:/code-generator author=MyBatis-Plus fileOverride=true openDir=false ``` 其中,jdbc.driver、jdbc.url、jdbc.username、jdbc.password是数据库的配置信息,outputDir是生成文件的输出目录,author是代码的作者,fileOverride是是否覆盖已有文件,openDir是是否打开输出目录。 3. 编写代码生成器模板文件 在src/main/resources/templates目录下创建模板文件,例如entity.java.vm、mapper.xml.vm、service.java.vm、serviceImpl.java.vm等,编写模板文件的内容。 模板文件中使用Velocity的语法,可以使用变量、条件语句、循环语句等,例如: ```java package ${packageName}; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; /** * ${tableComment} */ @Data @TableName("${tableName}") public class ${entityName} { #foreach($column in $table.columns) /** * ${column.columnComment} */ private ${column.javaType} ${column.fieldName}; #end } ``` 在模板文件中,$packageName、$tableComment、$tableName、$entityName、$table.columns等都是变量,会根据生成器配置文件和数据库表的信息动态替换为具体的值。 4. 运行代码生成器 编写好配置文件和模板文件后,就可以运行代码生成器了。在Java代码中使用CodeGenerator类,并传入配置文件和模板文件的路径,即可启动代码生成器,例如: ```java public class MybatisPlusGenerator { public static void main(String[] args) { String configFile = "generator.properties"; String templatePath = "/templates/%s.vm"; AutoGenerator generator = new AutoGenerator(); // 全局配置 GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setAuthor(PropertyUtil.getProperty(configFile, "author")); globalConfig.setFileOverride(Boolean.parseBoolean(PropertyUtil.getProperty(configFile, "fileOverride"))); globalConfig.setOpen(Boolean.parseBoolean(PropertyUtil.getProperty(configFile, "openDir"))); globalConfig.setOutputDir(PropertyUtil.getProperty(configFile, "outputDir")); generator.setGlobalConfig(globalConfig); // 数据源配置 DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setDbType(DbType.MYSQL); dataSourceConfig.setDriverName(PropertyUtil.getProperty(configFile, "jdbc.driver")); dataSourceConfig.setUrl(PropertyUtil.getProperty(configFile, "jdbc.url")); dataSourceConfig.setUsername(PropertyUtil.getProperty(configFile, "jdbc.username")); dataSourceConfig.setPassword(PropertyUtil.getProperty(configFile, "jdbc.password")); generator.setDataSource(dataSourceConfig); // 包配置 PackageConfig packageConfig = new PackageConfig(); packageConfig.setParent(PropertyUtil.getProperty(configFile, "package")); generator.setPackageInfo(packageConfig); // 自定义配置 InjectionConfig injectionConfig = new InjectionConfig() { @Override public void initMap() { } }; injectionConfig.setFileOutConfigList(getFileOutConfigList(templatePath)); generator.setCfg(injectionConfig); // 配置模板 TemplateConfig templateConfig = new TemplateConfig(); templateConfig.setXml(null); generator.setTemplate(templateConfig); // 策略配置 StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig.setNaming(NamingStrategy.underline_to_camel); strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); strategyConfig.setEntityLombokModel(true); strategyConfig.setRestControllerStyle(true); strategyConfig.setInclude(PropertyUtil.getProperty(configFile, "tableNames").split(",")); generator.setStrategy(strategyConfig); generator.execute(); } private static List<FileOutConfig> getFileOutConfigList(String templatePath) { List<FileOutConfig> fileOutConfigList = new ArrayList<>(); fileOutConfigList.add(new FileOutConfig(templatePath) { @Override public String outputFile(TableInfo tableInfo) { return String.format("%s/%s%s", PropertyUtil.getProperty("generator.properties", "outputDir"), tableInfo.getEntityName(), this.getSuffix()); } }); return fileOutConfigList; } } ``` 在代码中,使用AutoGenerator类配置全局配置、数据源配置、包配置、自定义配置、模板配置、策略配置等,然后调用execute()方法即可生成代码。 总结:使用MyBatis-Plus代码生成器可以快速生成基于MyBatis-Plus的CRUD代码,减少手动编写代码的工作量,提高开发效率。需要注意的是,生成的代码只是基础代码,需要根据具体业务进行修改和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值