MyBatisPlus(四、代码生成器)

作者:大三的土狗

专栏:MyBatis-Plus
在这里插入图片描述


一、旧版本

注意

适用版本:mybatis-plus-generator 3.5.1 以下版本

  AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速根据数据表自动生成实体类、Mapper、Service、ServiceImpl、Controller等各个模块的代码,极大的提升了开发效率。

1、添加模板引擎依赖

  添加 模板引擎 依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。

Velocity(默认):

<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>最新版本</version>
</dependency>

Freemarker:

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>最新版本</version>
</dependency>

Beetl:

<dependency>
    <groupId>com.ibeetl</groupId>
    <artifactId>beetl</artifactId>
    <version>最新版本</version>
</dependency>

我们选用默认的

2、添加generator依赖

在 pom.xml 导入 MyBatis Plus Generator 的依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.3.1.tmp</version>
</dependency>

<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity</artifactId>
    <version>1.7</version>
</dependency>
3、编写生成器代码
1、配置 GlobalConfig

这里是生成的位置作者

GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
globalConfig.setAuthor("jobob");
globalConfig.setOpen(false);
2、DataSourceConfig

这里是数据库的连接信息

DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ant?useUnicode=true&useSSL=false&characterEncoding=utf8");
dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("password");

详细代码如下:

package com.example.mybatisplus;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class Main {

    public static void main(String[] args) {
        //1、创建generator对象
        AutoGenerator autoGenerator = new AutoGenerator();
        //数据源
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL);
        dataSourceConfig.setUrl("jdbc:mysql://127.0.0.1:3306/test?useUnicode=ture&characterEncoding=UTF-8&serverTimezone=GMT%2B8");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("root");
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        autoGenerator.setDataSource(dataSourceConfig);      //设置数据源
        //2、全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setOutputDir(System.getProperty("user.dir")+"/src/main/java");
        globalConfig.setOpen(false);        //是否打开输出目录
        globalConfig.setAuthor("xmp");      //作者
        globalConfig.setServiceName("%sService");           //设置生成的service接口的名字不带I
        autoGenerator.setGlobalConfig(globalConfig);        //设置全局配置
        //3、包信息
        PackageConfig packageConfig = new PackageConfig();  //包配置
        packageConfig.setParent("com.example.mybatisplus");     //设置父包名
        packageConfig.setModuleName("generator");       //  设置子包名
        packageConfig.setController("controller");      //设置控制器包名
        packageConfig.setService("service");
        packageConfig.setServiceImpl("service.impl");
        packageConfig.setMapper("mapper");
        packageConfig.setEntity("entity");
        autoGenerator.setPackageInfo(packageConfig);        //设置包配置
        //4、配置策略
        StrategyConfig strategyConfig = new StrategyConfig();       //策略配置
        strategyConfig.setEntityLombokModel(true);      //是否使用lombok
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);        //数据库表映射到实体的命名策略
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);  //数据库表字段映射到实体的命名策略
        autoGenerator.setStrategy(strategyConfig);      //设置策略配置

        autoGenerator.execute();        //执行生成

    }

}
4、效果

在这里插入图片描述

二、新版本

1、导入依赖
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>最新版本</version>
</dependency>

注意

当前包未传递依赖 MP 包、mysql等,需要自己引入!

2、快速生成
FastAutoGenerator.create("url", "username", "password")
    .globalConfig(builder -> {
        builder.author("baomidou") // 设置作者
            .enableSwagger() // 开启 swagger 模式
            .fileOverride() // 覆盖已生成文件
            .outputDir("D://"); // 指定输出目录
    })
    .packageConfig(builder -> {
        builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名
            .moduleName("system") // 设置父包模块名
            .pathInfo(Collections.singletonMap(OutputFile.xml, "D://")); // 设置mapperXml生成路径
    })
    .strategyConfig(builder -> {
        builder.addInclude("t_simple") // 设置需要生成的表名
            .addTablePrefix("t_", "c_"); // 设置过滤表前缀
    })
    .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
    .execute();

3、交互式生成
FastAutoGenerator.create(DATA_SOURCE_CONFIG)
    // 全局配置
    .globalConfig((scanner, builder) -> builder.author(scanner.apply("请输入作者名称?")).fileOverride())
    // 包配置
    .packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入包名?")))
    // 策略配置
    .strategyConfig((scanner, builder) -> builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))
                        .controllerBuilder().enableRestStyle().enableHyphenStyle()
                        .entityBuilder().enableLombok().addTableFills(
                                new Column("create_time", FieldFill.INSERT)
                        ).build())
    /*
        模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker
       .templateEngine(new BeetlTemplateEngine())
       .templateEngine(new FreemarkerTemplateEngine())
     */
    .execute();


// 处理 all 情况
protected static List<String> getTables(String tables) {
    return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
}

4、配置
1、DataSourceConfig

基础配置

属性说明示例
urljdbc 路径jdbc:mysql://127.0.0.1:3306/mybatis-plus
username数据库账号root
password数据库密码123456
new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")
    .build();

可选配置

方法说明示例
dbQuery(IDbQuery)数据库查询new MySqlQuery()
schema(String)数据库 schema(部分数据库适用)mybatis-plus
typeConvert(ITypeConvert)数据库类型转换器new MySqlTypeConvert()
keyWordsHandler(IKeyWordsHandler)数据库关键字处理器new MySqlKeyWordsHandler()
new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")
    .dbQuery(new MySqlQuery())
    .schema("mybatis-plus")
    .typeConvert(new MySqlTypeConvert())
    .keyWordsHandler(new MySqlKeyWordsHandler())
    .build();
2、GlobalConfig
方法说明示例
fileOverride覆盖已生成文件默认值:false
disableOpenDir禁止打开输出目录默认值:true
outputDir(String)指定输出目录/opt/baomidou/ 默认值: windows:D:// linux or mac : /tmp
author(String)作者名baomidou 默认值:作者
enableKotlin开启 kotlin 模式默认值:false
enableSwagger开启 swagger 模式默认值:false
dateType(DateType)时间策略DateType.ONLY_DATE 默认值: DateType.TIME_PACK
commentDate(String)注释日期默认值: yyyy-MM-dd
new GlobalConfig.Builder()
    .fileOverride()
    .outputDir("/opt/baomidou")
    .author("baomidou")
    .enableKotlin()
    .enableSwagger()
    .dateType(DateType.TIME_PACK)
    .commentDate("yyyy-MM-dd")
    .build();
3、PackageConfig
方法说明示例
parent(String)父包名默认值:com.baomidou
moduleName(String)父包模块名默认值:无
entity(String)Entity 包名默认值:entity
service(String)Service 包名默认值:service
serviceImpl(String)Service Impl 包名默认值:service.impl
mapper(String)Mapper 包名默认值:mapper
xml(String)Mapper XML 包名默认值:mapper.xml
controller(String)Controller 包名默认值:controller
other(String)自定义文件包名输出自定义文件时所用到的包名
pathInfo(Map<OutputFile, String>)路径配置信息Collections.singletonMap(OutputFile.mapperXml, “D://”)
new PackageConfig.Builder()
    .parent("com.baomidou.mybatisplus.samples.generator")
    .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();
4、TemplateConfig
方法说明示例
disable禁用所有模板
disable(TemplateType…)禁用模板TemplateType.ENTITY
entity(String)设置实体模板路径(JAVA)/templates/entity.java
entityKt(String)设置实体模板路径(kotlin)/templates/entity.java
service(String)设置 service 模板路径/templates/service.java
serviceImpl(String)设置 serviceImpl 模板路径/templates/serviceImpl.java
mapper(String)设置 mapper 模板路径/templates/mapper.java
mapperXml(String)设置 mapperXml 模板路径/templates/mapper.xml
controller(String)设置 controller 模板路径/templates/controller.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();
5、InjectionConfig
方法说明示例
beforeOutputFile(BiConsumer<TableInfo, Map<String, Object>>)输出文件之前消费者
customMap(Map<String, Object>)自定义配置 Map 对象Collections.singletonMap(“test”, “baomidou”)
customFile(Map<String, String>)自定义配置模板文件Collections.singletonMap(“test.txt”, “/templates/test.vm”)
new InjectionConfig.Builder()
    .beforeOutputFile((tableInfo, objectMap) -> {
        System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
    })
    .customMap(Collections.singletonMap("test", "baomidou"))
    .customFile(Collections.singletonMap("test.txt", "/templates/test.vm"))
    .build();

6、StrategyConfig

方法说明示例
enableCapitalMode开启大写命名默认值:false
enableSkipView开启跳过视图默认值:false
disableSqlFilter禁用 sql 过滤默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关
enableSchema启用 schema默认值:false,多 schema 场景的时候打开
likeTable(LikeTable)模糊表匹配(sql 过滤)likeTable 与 notLikeTable 只能配置一项
notLikeTable(LikeTable)模糊表排除(sql 过滤)likeTable 与 notLikeTable 只能配置一项
addInclude(String…)增加表匹配(内存过滤)include 与 exclude 只能配置一项
addExclude(String…)增加表排除匹配(内存过滤)include 与 exclude 只能配置一项
addTablePrefix(String…)增加过滤表前缀
addTableSuffix(String…)增加过滤表后缀
addFieldPrefix(String…)增加过滤字段前缀
addFieldSuffix(String…)增加过滤字段后缀
entityBuilder实体策略配置
controllerBuildercontroller 策略配置
mapperBuildermapper 策略配置
serviceBuilderservice 策略配置

其他具体详细配置参考:https://baomidou.com/pages/981406/#service-%E7%AD%96%E7%95%A5%E9%85%8D%E7%BD%AE

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
MyBatis Plus 是一个基于 MyBatis 的增强工具,它提供了很多便捷的功能,其中包括代码生成器。通过使用 MyBatis Plus 的代码生成器,你可以自动生成数据库表对应的实体类、Mapper 接口、Service 接口和ServiceImpl 实现类等代码,减少手动编写重复代码的工作量。 要使用 MyBatis Plus 的代码生成器,你需要按照以下步骤进行操作: 1. 配置数据库连接:在配置文件中配置数据库连接信息,包括数据库的 URL、用户名、密码等。 2. 引入 MyBatis Plus 依赖:在项目的 pom.xml 文件(如果是 Maven 项目)中引入 MyBatis Plus 的依赖。 3. 配置代码生成器:通过配置代码生成器的相关参数,如要生成的表名、包路径、作者信息等。 4. 执行代码生成器:运行代码生成器,它将根据配置的参数自动生成对应的代码文件。 下面是一个简单的示例配置文件: ```xml <configuration> <dataSource type="com.baomidou.mybatisplus.generator.config.DataSourceConfig"> <driverName>com.mysql.jdbc.Driver</driverName> <url>jdbc:mysql://localhost:3306/test</url> <username>root</username> <password>123456</password> </dataSource> <packageConfig parent="com.example"> <moduleName>entity</moduleName> </packageConfig> <strategy> <tablePrefix>tb_</tablePrefix> </strategy> <templateConfig> <controller>/templates/controller.java</controller> <service>/templates/service.java</service> <serviceImpl>/templates/serviceImpl.java</serviceImpl> <mapper>/templates/mapper.xml</mapper> <entity>/templates/entity.java</entity> </templateConfig> </configuration> ``` 配置文件中的 `<dataSource>` 标签用于配置数据库连接,`<packageConfig>` 标签用于配置代码生成的包路径,`<strategy>` 标签用于配置表名的前缀等策略,`<templateConfig>` 标签用于配置生成的代码模板。 在以上示例中,`/templates/` 目录下的模板文件将会被使用,你可以根据自己的需求进行修改。 执行代码生成器时,可以通过编写一个简单的 Java 类来执行,如: ```java public class CodeGenerator { public static void main(String[] args) { AutoGenerator generator = new AutoGenerator(); generator.setGlobalConfig(new GlobalConfig() .setOutputDir("D:\\code") .setAuthor("C知道") .setOpen(false) ); generator.setDataSource(new DataSourceConfig() .setUrl("jdbc:mysql://localhost:3306/test") .setDriverName("com.mysql.jdbc.Driver") .setUsername("root") .setPassword("123456") ); generator.setPackageInfo(new PackageConfig() .setParent("com.example") .setModuleName("entity") ); generator.setStrategy(new StrategyConfig() .setTablePrefix("tb_") ); generator.setTemplate(new TemplateConfig() .setController("/templates/controller.java") .setService("/templates/service.java") .setServiceImpl("/templates/serviceImpl.java") .setMapper("/templates/mapper.xml") .setEntity("/templates/entity.java") ); generator.execute(); } } ``` 以上示例中,`setOutputDir` 方法用于配置代码生成的输出目录,`setAuthor` 方法用于配置生成代码时的作者信息。 通过以上步骤,你就可以使用 MyBatis Plus 的代码生成器来自动生成相应的代码。希望对你有所帮助!如果还有其他问题,请继续提问。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值