1、导入依赖(我这里用的是gradle构建工具,maven也一样啦~)

plugins {
id 'java'
id 'org.springframework.boot' version '2.7.3' // 定义SpringBoot版本,不单独使用
id 'io.spring.dependency-management' version '1.1.0'
} group 'com.qbb'
version '1.0-SNAPSHOT'
// 设置编译的Java版本
sourceCompatibility = 17
targetCompatibility = 17 repositories {
mavenCentral()
} dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
implementation 'org.springframework.boot:spring-boot-starter-web' //省略版本,原生bom支持,插件management提供
implementation 'org.springframework.boot:spring-boot-devtools' // 热部署
implementation 'org.projectlombok:lombok:1.18.24' // 简化开发
implementation 'com.baomidou:mybatis-plus-boot-starter:3.5.2' // mybatis-plus
implementation 'com.baomidou:mybatis-plus-generator:3.5.3' // mybatis-plus代码生成器
implementation 'org.freemarker:freemarker:2.3.31' // 模板引擎
implementation 'mysql:mysql-connector-java:8.0.31' // mysql
implementation 'io.springfox:springfox-boot-starter:3.0.0' // swagger3
} test {
useJUnitPlatform()
}

2、编写两个基础类用作继承(当然也可以不用)

// BaseController 封装公共请求
package com.qbb.security.common; public class BaseController {
// WARN:自定义信息
} // BaseEntity 封装公共字段
package com.qbb.security.common; import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data; import java.io.Serializable;
import java.time.LocalDateTime; @Data
public abstract class BaseEntity implements Serializable { @TableId(value = "id", type = IdType.AUTO)
private Long id; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private LocalDateTime createTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime; }

3、编写CodeGenerator(完整配置,有些参数没用到,感兴趣的自己研究一下~)

package com.qbb.security.code;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;
import com.qbb.security.common.BaseController;
import com.qbb.security.common.BaseEntity;
import org.apache.ibatis.annotations.Mapper; import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner; public class CodeGenerator { public static void main(String[] args) {
// 获取表名
List<String> tables = getTableNames();
// 数据库设置
FastAutoGenerator.create("jdbc:mysql://localhost:3306/startqbb", "root", "root")
/**
* 全局配置
*/
.globalConfig(builder -> {
builder.author("QIUQIU&LL") // 作者
.disableOpenDir() // 禁止打开输出目录
.outputDir(System.getProperty("user.dir") + "\\src\\main\\java") // 指定输出目录 /opt/baomidou/ 默认值: windows:D:// linux or mac : /tmp
.enableSwagger() // 开启 swagger 模式 默认值:false
.dateType(DateType.TIME_PACK) // 时间策略 DateType.ONLY_DATE 默认值: DateType.TIME_PACK
.commentDate("yyyy-MM-dd"); // 注释日期 默认值: yyyy-MM-dd
// .fileOverride(); // 覆盖已有文件(已迁移到策略配置中,3.5.4版本会删除此方法) })
/**
* 包配置
*/
.packageConfig(builder -> builder.parent("com.qbb.security") // 父包名 默认值:com.baomidou
// .moduleName("com.qbb.security") // 父包模块名 默认值:无
.entity("domain") // Entity 包名 默认值:common
.service("service") // Service 包名 默认值:service
.serviceImpl("service.impl") // Service Impl 包名 默认值:service.impl
.controller("controller") // Controller 包名 默认值:controller
.mapper("mapper") // Mapper 包名 默认值:mapper
.xml("mapper") // Mapper XML 包名 默认值:mapper.xml
.pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "\\src\\main\\resources\\mapper"))) // xml的路径配置信息
/**
* 策略配置
*/
.strategyConfig(builder -> builder.addInclude(tables)// 增加表匹配(内存过滤) include 与 exclude 只能配置一项
// .enableCapitalMode() // 开启大写命名 默认值:false
// .enableSkipView() // 开启跳过视图 默认值:false
// .disableSqlFilter() // 禁用 sql 过滤 默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关
// .enableSchema() // 启用 schema 默认值:false,多 schema 场景的时候打开
// .likeTable(LikeTable) // 模糊表匹配(sql 过滤) likeTable 与 notLikeTable 只能配置一项
// .notLikeTable(LikeTable) // 模糊表排除(sql 过滤) likeTable 与 notLikeTable 只能配置一项
// .addExclude() // 增加表排除匹配(内存过滤) include 与 exclude 只能配置一项
.addTablePrefix("t_", "sys_", "tb_")
// .addTableSuffix(String...) // 增加过滤表后缀
// .addFieldPrefix(String...) // 增加过滤字段前缀
// .addFieldSuffix(String...) // 增加过滤字段后缀 /**
* service 策略配置
*/
.serviceBuilder()
.superServiceClass(IService.class) // 设置 service 接口父类 BaseService.class
// .superServiceClass(String) // 设置 service 接口父类 com.baomidou.global.BaseService
.superServiceImplClass(ServiceImpl.class) // 设置 service 实现类父类 BaseServiceImpl.class
// .superServiceImplClass(String) // 设置 service 实现类父类 com.baomidou.global.BaseServiceImpl
// .convertServiceFileName(ConverterFileName) // 转换 service 接口文件名称
// .convertServiceImplFileName(ConverterFileName) // 转换 service 实现类文件名称
.formatServiceFileName("%sService") // 格式化 service 接口文件名称
.formatServiceImplFileName("%sServiceImpl") // 格式化 service 实现类文件名称 /**
* 实体策略配置
*/
.entityBuilder()
// .nameConvert(INameConvert) // 名称转换实现
.superClass(BaseEntity.class) // 设置父类 BaseEntity.class
// .superClass(String) // 设置父类 com.baomidou.global.BaseEntity
.disableSerialVersionUID() // 禁用生成 serialVersionUID 默认值:true
// .enableColumnConstant() // 开启生成字段常量 默认值:false
.enableChainModel() // 开启链式模型 默认值:false
.enableRemoveIsPrefix() // 开启 Boolean 类型字段移除 is 前缀 默认值:false
.enableTableFieldAnnotation() // 开启生成实体时生成字段注解 默认值:false
// .enableActiveRecord() // 开启 ActiveRecord 模型 默认值:false
.versionColumnName("version") // 乐观锁字段名(数据库)
// .versionPropertyName(String) // 乐观锁属性名(实体)
.logicDeleteColumnName("is_deleted") // 逻辑删除字段名(数据库)
// .logicDeletePropertyName(String) // 逻辑删除属性名(实体)
.naming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略 默认下划线转驼峰命名:NamingStrategy.underline_to_camel
// .columnNaming(NamingStrategy.underline_to_camel) // 数据库表字段映射到实体的命名策略 默认为 null,未指定按照 naming 执行
// .addSuperEntityColumns("id", "createTime", "updateTime", "statu") // 添加父类公共字段
// .addIgnoreColumns(String...) // 添加忽略字段
.addTableFills(new Column("create_time", FieldFill.INSERT)) // 添加表字段填充
.addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE)) // 添加表字段填充
// .idType(IdType.AUTO) // 全局主键类型
// .convertFileName(ConverterFileName)// 转换文件名称
// .formatFileName(String) // 格式化文件名称
.enableLombok() // 开启 lombok 模型 默认值:false /**
* controller 策略配置
*/
.controllerBuilder()
.superClass(BaseController.class) // 设置父类 BaseController.class
// .superClass(String) // 设置父类 com.baomidou.global.BaseController
.enableHyphenStyle() // 开启驼峰转连字符 默认值:false
.enableRestStyle() // 开启生成@RestController 控制器 默认值:false
// .convertFileName(ConverterFileName) // 转换文件名称
.formatFileName("%sController")// 格式化文件名称 /**
* mapper 策略配置
*/
.mapperBuilder()
.superClass(BaseMapper.class) // 设置父类 BaseMapper.class
// .superClass(String) //设置父类 com.baomidou.global.BaseMapper
// .enableMapperAnnotation() //开启 @Mapper 注解 默认值:false WARN 因为现在mybatis-plus传递mybatis-spring依赖,这里是没问题的,但后面如果考虑脱离mybatis-spring的时候就需要把这里处理掉,建议使用mapperAnnotation方法来标记自己的注解。
.mapperAnnotation(Mapper.class)
.enableBaseResultMap() // 启用 BaseResultMap 生成 默认值:false
.enableBaseColumnList() // 启用 BaseColumnList 默认值:false
// .cache(Class<? extends Cache>) //设置缓存实现类 MyMapperCache.class
// .convertMapperFileName(ConverterFileName) //转换 mapper 类文件名称
// .convertXmlFileName(ConverterFileName) //转换 xml 文件名称
.formatMapperFileName("%sMapper") // 格式化 mapper 文件名称
.formatXmlFileName("%sMapper") // 格式化 xml 实现类文件名称
)
/**
* 模板配置
*/
.templateConfig(builder -> {
// WARN : 使用我们自定义模板 需要注意虽然我们文件是以ftl结尾,但是这里不要加上ftl,不然会报模板引擎找不到文件
builder
// .disable(TemplateType.ENTITY,TemplateType.SERVICE...) // 禁用模板
// .disable() // 禁用所有模板
.entity("/templates/myEntity.java") // 自定义entity模板
.controller("/templates/myControlle.java") // 自定义controller模板
.service("/templates/myService.java") // 自定义service模板
.serviceImpl("/templates/myServiceImpl.java") // 自定义servicei.mpl模板
.mapper("/templates/myMapper.java") // 自定义mapper模板
.xml("/templates/myMapper.xml"); // 自定义xml模板
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
} /**
* 读取控制台内容,获取用户输入的表名
*/
public static List<String> getTableNames() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入表名(多个表名以逗号隔开):");
String tableNames = scanner.nextLine();
if (StringUtils.isNotBlank(tableNames)) {
return Arrays.asList(tableNames.split(","));
}
throw new MybatisPlusException("请按照格式输入正确的表名!");
}
}

4、CodeGenerator(CV直接用)

package com.qbb.security.code;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;
import com.qbb.security.common.BaseController;
import com.qbb.security.common.BaseEntity;
import org.apache.ibatis.annotations.Mapper; import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner; public class CodeGenerator {
public static void main(String[] args) {
// 获取表名
List<String> tables = getTableNames();
// 数据库设置
FastAutoGenerator.create("jdbc:mysql://localhost:3306/startqbb", "root", "root")
/**
* 全局配置
*/
.globalConfig(builder -> {
builder.author("QIUQIU&LL") // 作者
.disableOpenDir() // 禁止打开输出目录
.outputDir(System.getProperty("user.dir") + "\\src\\main\\java") // 指定输出目录 /opt/baomidou/ 默认值: windows:D:// linux or mac : /tmp
.enableSwagger() // 开启 swagger 模式 默认值:false
.dateType(DateType.TIME_PACK) // 时间策略 DateType.ONLY_DATE 默认值: DateType.TIME_PACK
.commentDate("yyyy-MM-dd"); // 注释日期 默认值: yyyy-MM-dd })
/**
* 包配置
*/
.packageConfig(builder -> builder.parent("com.qbb.security") // 父包名 默认值:com.baomidou
.entity("domain") // Entity 包名 默认值:common
.service("service") // Service 包名 默认值:service
.serviceImpl("service.impl") // Service Impl 包名 默认值:service.impl
.controller("controller") // Controller 包名 默认值:controller
.mapper("mapper") // Mapper 包名 默认值:mapper
.xml("mapper") // Mapper XML 包名 默认值:mapper.xml
.pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "\\src\\main\\resources\\mapper"))) // xml的路径配置信息
/**
* 策略配置
*/
.strategyConfig(builder -> builder.addInclude(tables)// 增加表匹配(内存过滤) include 与 exclude 只能配置一项
.addTablePrefix("t_", "sys_", "tb_") /**
* service 策略配置
*/
.serviceBuilder()
.superServiceClass(IService.class) // 设置 service 接口父类 BaseService.class
.superServiceImplClass(ServiceImpl.class) // 设置 service 实现类父类 BaseServiceImpl.class
.formatServiceFileName("%sService") // 格式化 service 接口文件名称
.formatServiceImplFileName("%sServiceImpl") // 格式化 service 实现类文件名称 /**
* 实体策略配置
*/
.entityBuilder()
.superClass(BaseEntity.class) // 设置父类 BaseEntity.class
.disableSerialVersionUID() // 禁用生成 serialVersionUID 默认值:true
.enableChainModel() // 开启链式模型 默认值:false
.enableRemoveIsPrefix() // 开启 Boolean 类型字段移除 is 前缀 默认值:false
.enableTableFieldAnnotation() // 开启生成实体时生成字段注解 默认值:false
.versionColumnName("version") // 乐观锁字段名(数据库)
.logicDeleteColumnName("is_deleted") // 逻辑删除字段名(数据库)
.naming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略 默认下划线转驼峰命名:NamingStrategy.underline_to_camel
.addTableFills(new Column("create_time", FieldFill.INSERT)) // 添加表字段填充
.addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE)) // 添加表字段填充
.enableLombok() // 开启 lombok 模型 默认值:false /**
* controller 策略配置
*/
.controllerBuilder()
.superClass(BaseController.class) // 设置父类 BaseController.class
.enableHyphenStyle() // 开启驼峰转连字符 默认值:false
.enableRestStyle() // 开启生成@RestController 控制器 默认值:false
.formatFileName("%sController")// 格式化文件名称 /**
* mapper 策略配置
*/
.mapperBuilder()
.superClass(BaseMapper.class) // 设置父类 BaseMapper.class
.mapperAnnotation(Mapper.class)
.enableBaseResultMap() // 启用 BaseResultMap 生成 默认值:false
.enableBaseColumnList() // 启用 BaseColumnList 默认值:false
.formatMapperFileName("%sMapper") // 格式化 mapper 文件名称
.formatXmlFileName("%sMapper") // 格式化 xml 实现类文件名称
)
/**
* 模板配置
*/
.templateConfig(builder -> {
// WARN : 使用我们自定义模板 需要注意虽然我们文件是以ftl结尾,但是这里不要加上ftl,不然会报模板引擎找不到文件
builder
.entity("/templates/myEntity.java") // 自定义entity模板
.controller("/templates/myControlle.java") // 自定义controller模板
.service("/templates/myService.java") // 自定义service模板
.serviceImpl("/templates/myServiceImpl.java") // 自定义servicei.mpl模板
.mapper("/templates/myMapper.java") // 自定义mapper模板
.xml("/templates/myMapper.xml"); // 自定义xml模板
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
/**
* 读取控制台内容,获取用户输入的表名
*/
public static List<String> getTableNames() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入表名(多个表名以逗号隔开):");
String tableNames = scanner.nextLine();
if (StringUtils.isNotBlank(tableNames)) {
return Arrays.asList(tableNames.split(","));
}
throw new MybatisPlusException("请按照格式输入正确的表名!");
}
}

5、文件中使用到的模板文件我放在阿里云盘了,各位自取

模板文件 ===> templates

MybatisPlus最新代码生成器(version3.5.1+),自定义文件模板的更多相关文章

  1. Pycharm 自定义文件模板

    Pycharm 自定义文件模板 每次新建文件都有相同的代码框架,每次重复敲浪费了程序员的寿命啊 按照下面方式自定义自己的模板:

  2. SpringBoot之【mybatisplus】代码生成器

    1.概述. AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity.Mapper.Mapper XML.Service.C ...

  3. MybatisPlus使用代码生成器遇到的小问题

    MyBatisPlus 在3.0.3版本之前使用代码生成器因为存在默认依赖,所以不需要其他的依赖,项目中使用的是3.0.1的版本,所以不用添加其他依赖,添加之后反倒是会报错,实际上MP官网上已经说明了 ...

  4. C# 自定义文件图标 双击启动 (修改注册表)

    程序生成的自定义文件,比如后缀是.test 这种文件怎么直接启动打开程序,并打开本文件呢 1.双击打开 2.自定义的文件,有图标显示 3.自定义的文件,点击右键有相应的属性 后台代码:(如何在注册表中 ...

  5. java学习笔记(2):获取文件名和自定义文件过滤器

    //自定义文件过滤器import java.io.File; import javax.swing.filechooser.*; public class JavaChooser extends Fi ...

  6. 重新想象 Windows 8 Store Apps (26) - 选取器: 自定义文件选取窗口, 自定义文件保存窗口

    原文:重新想象 Windows 8 Store Apps (26) - 选取器: 自定义文件选取窗口, 自定义文件保存窗口 [源码下载] 重新想象 Windows 8 Store Apps (26) ...

  7. KVO实现自定义文件复制进度展示

    一.创建文件 说明:自定义文件类,通过NSFileManager 以及NSFileHandle 实现文件的创建和copy,为了控制内存的并发使用,通过控制每次赋值的固定长度来分多次复制: NSStri ...

  8. red5 自定义文件存放目录

    Red5 流媒体服务器 自定义文件存放目录 Red5在正常情况下,安装之后文件必须存放在Red5安装目录下的oflaDemo\streams中,不能自定义存放目录,例如Red5 安装在C盘,但是我的文 ...

  9. 如何开发使用自定义文件的OEM应用程序

    有关创建和使用自定义数据文件的详细信息,请参阅DISM应用程序包(.appx或.appxbundle)服务命令行选项. 了解如何开发使用自定义文件的应用程序,将信息从OEM传递到应用程序. 对于您为O ...

  10. 背水一战 Windows 10 (95) - 选取器: 自定义文件保存选取器

    [源码下载] 背水一战 Windows 10 (95) - 选取器: 自定义文件保存选取器 作者:webabcd 介绍背水一战 Windows 10 之 选取器 自定义文件保存选取器 示例1.演示如何 ...

随机推荐

  1. 应用程序接口(API)安全的入门指南

    ​  什么是 API?​ 对于初学者来说,API 是指为两个不同的应用之间实现流畅通信,而设计的应用程序编程接口.它通常被称为应用程序的"中间人".由于我们需要保护用户的持有数据. ...

  2. 使用“文心一言”编写技术博文《搭建企业知识库:基于 Wiki.js 的实践指南》

    百度于8月31日零点宣布,文心一言率先向全社会全面开放.我也是立即体验了下,感觉还不错.下面分享一下,如何使用"文心一言"写一篇技术博客. Step 01 生成文案主体 可以对文心 ...

  3. SQL Server用户的设置与授权

    SQL Server用户的设置与授权 SSMS 登陆方式有两种,一是直接使用Windows身份验证,二是SQL Server身份验证.使用SQL Server用户设置与授权不仅可以将不同的数据库开放给 ...

  4. 「luogu - P3911」最小公倍数之和

    link. Denote \(cnt_{x}\) = the number of occurrences of \(x\), \(h\) = the maximum of \(a_i\), there ...

  5. Linux部署项目常用命令(持续更新)

    防火墙配置 # 启动防火墙服务 systemctl start firewalld # 关闭防火墙服务 systemctl stop firewalld # 查看防火墙服务状态 systemctl s ...

  6. C51单片机开发

    C51单片机开发笔记 定时器 C51中的定时器和计数器是同一个硬件电路支持的,通过寄存器配置不同,就可以将他当做定时器 或者计数器使用. 确切的说,定时器和计数器区别是致使他们背后的计数存储器加1的信 ...

  7. Go 语言开发环境搭建

    Go 语言开发环境搭建 目录 Go 语言开发环境搭建 一. GO 环境安装 1.1 下载 1.2 Go 版本的选择 1.3 安装 1.3.1 Windows安装 1.3.2 Linux下安装 1.3. ...

  8. tiptopGP5.2链接所有表或报不存在函数处理

    修改交易的表时需要特别注意,改完要关联所有有关的表r.rb.rb pja_file 当链接提示不存在的函数调用,又无法确定具体是那个关联程序时, 可以在本函数内先定义这个报错的函数,重新链接时,系统会 ...

  9. Java虚拟机(JVM):第二幕:自动内存管理 - Java内存区域与内存溢出异常

    前言:Java与C++之间有一堵高墙,主要是有内存动态分配和垃圾收集技术组成的.墙外的人想要进来,墙内的人想要出去. 一.运行时数据区域 JVM在执行Java程序时,会将其管理的内存划分为若干个不同的 ...

  10. C#学习笔记--复杂数据类型、函数和结构体

    C#基础 复杂数据类型 特点:多个数据变量地一个集合体,可以自己命名 种类:枚举.数组和结构体 枚举:整型常量的集合 数组:任意变量类型的顺序存储的数据集合 结构体:任意变量类型的数据组合成的数据块 ...