2024最新MyBatis-Plus代码生成器的使用!最细以及踩坑解决

 代码生成器 | MyBatis-Plus

第一步引入依赖:

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

第二步快速生成:

public class CodeGenerator {
public static void main(String[] args) {
    FastAutoGenerator.create("url", "username", "password")
            .globalConfig(builder -> {
                builder.author("baomidou") // 设置作者
                        .enableSwagger() // 开启 swagger 模式
                        .outputDir("D://"); // 指定输出目录
            })
            .dataSourceConfig(builder ->
                    builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
                        int typeCode = metaInfo.getJdbcType().TYPE_CODE;
                        if (typeCode == Types.SMALLINT) {
                            // 自定义类型转换
                            return DbColumnType.INTEGER;
                        }
                        return typeRegistry.getColumnType(metaInfo);
                    })
            )
            .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();
}
}

运行发现报错:

Exception in thread "main" java.lang.NoClassDefFoundError: freemarker/template/Configuration

Caused by: java.lang.ClassNotFoundException: freemarker.template.Configuration

14:11:59.712 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator - ==========================准备生成文件...==========================
Exception in thread "main" java.lang.NoClassDefFoundError: freemarker/template/Configuration
	at com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine.init(FreemarkerTemplateEngine.java:41)
	at com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine.init(FreemarkerTemplateEngine.java:36)
	at com.baomidou.mybatisplus.generator.AutoGenerator.execute(AutoGenerator.java:179)
	at com.baomidou.mybatisplus.generator.FastAutoGenerator.execute(FastAutoGenerator.java:213)
	at com.lzh.usercenterbackend.CodeGenerator.main(CodeGenerator.java:43)
Caused by: java.lang.ClassNotFoundException: freemarker.template.Configuration
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 5 more

原因在报错中已经说明了找不到freemarker.template.Configuration类,可以看到代码中.templateEngine(new FreemarkerTemplateEngine()) // 使用 Freemarker 模板引擎,需要用到freemarker模板引擎,而mybatis-plus-generator并没有这个依赖包,所以报错!!!

原因找到了那我们只需要引入这个依赖即可:

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>

跳过踩坑过程,快速使用

以下配置请看:代码生成器配置 | MyBatis-Plus

这里需要说明的是,如果你想覆盖已生成的文件,老的版本可以在globalConfig全局配置中.fileOverride(true)链式的声明,但是最新的版本中已经标注过时了,已经无效。

现在最新的用法就是在StrategyConfig策略配置中配置该选项,不过官网给的enableFileOverride选项并没有找到,网络上查阅资料也都是这个选项,后来摸索才发现是这个选项fileOverride

public class CodeGenerator {
    public static void main(String[] args) {
        // 使用 FastAutoGenerator 快速配置代码生成器
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai", "root", "123456")
                .globalConfig(builder -> {
                    builder.disableOpenDir() // 不允许自动打开输出目录
                            .author("xxx") // 设置作者
                            .outputDir(System.getProperty("user.dir") + "/src/main/java"); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("xxx") // 设置父包名
                            .controller("controller") // 设置 Controller 包名
                            .entity("entity") // 设置实体类包名
                            .mapper("dao") // 设置 Mapper 接口包名
                            .service("service") // 设置 Service 接口包名
                            .serviceImpl("service.impl") // 设置 Service 实现类包名
                            .xml("mapper") // 设置 Mapper XML 文件包名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mapper")); // 设置 Mapper XML 文件的输出路径
                })
                .strategyConfig(builder -> {
                    builder.addInclude("xxx") // 设置需要生成的表名
                            .controllerBuilder().enableRestStyle()
                            .entityBuilder().fileOverride().enableLombok().enableTableFieldAnnotation().logicDeleteColumnName("isDelete").addTableFills(new Property("createTime", FieldFill.INSERT)).addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
                            .mapperBuilder().fileOverride().formatMapperFileName("%sDao").formatXmlFileName("%sMapper")
                            .serviceBuilder().fileOverride().formatServiceFileName("%sService").formatServiceImplFileName("%sServiceImp");
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用 Freemarker 模板引擎
                .execute(); // 执行生成
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值