MyBatis-Plus——代码生成器(3.5.1+版本)

news/2024/10/17 20:21:47/

文章目录

    • 配置
      • 数据源配置(DataSource)
      • 全局配置(GlobalConfig)
      • 包配置(PackageConfig)
      • 策略配置(StrategyConfig)
      • 模板引擎配置(TemplateEngine)
    • 代码生成器测试样例
      • 步骤:
        • 1、创建测试数据库 mp
        • 2、创建一个 Spring-Boot 项目
        • 3、在 pom.xml 中导入相关依赖
        • 4、编写一个mian方法,加上框架
        • 5、进行数据源配置
        • 6、进行全局配置
        • 7、进行 包配置
        • 8、策略配置
        • 9、模板引擎配置
        • 10、执行
      • 执行效果演示:
    • 附1:快速生成样例代码
    • 附2:交互式生成样例代码

QQ截图20211121165840

MyBatis-Plus 官方文档:https://mp.baomidou.com/guide/generator-new.html

image-20211121150529787

这是官网上的文档,从官方文档中给快速生成代码中,可以看出代码生成器的配置结构为:

//1、配置数据源FastAutoGenerator.create("url", "username", "password")//2、全局配置.globalConfig(...)//3、包配置.packageConfig(...)//4、策略配置.strategyConfig(...)//5、模板引擎配置.templateEngine(...)//6、执行.execute();

我们只需要通过填空的方式去配置数据源(DataSource),全局配置(GlobalConfig),包配置(PackageConfig),策略配置(StrategyConfig)和模板引擎配置(TemplateEngine)即可。

官方文档上也给出了对于每一个配置我们可以进行什么操作。

配置

数据源配置(DataSource)

属性说明示例
urljdbc路径jdbc:mysql://127.0.0.1:3306/mybatis-plus
username数据库账号root
password数据库密码123456
dbQuery(IDbQuery)数据库查询new MySqlQuery()
schema(String)数据库schema(部分数据库适用)mybatis-plus
typeConvert(ITypeConvert)数据库类型转换器new MySqlTypeConvert()
keyWordsHandler(IKeyWordsHandler)数据库关键字处理器new MySqlKeyWordsHandler()

全局配置(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=Date 默认值: DateType.TIME_PACK=LocalDateTime
commentDate(String)注释日期默认值: yyyy-MM-dd

包配置(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
mapperXml(String)Mapper XML 包名默认值:mapper.xml
controller(String)Controller 包名默认值:controller
other(String)自定义文件包名输出自定义文件时所用到的包名
pathInfo(Map<OutputFile, String>)路径配置信息Collections.singletonMap(OutputFile.mapperXml, “D://”)

策略配置(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 策略配置

模板引擎配置(TemplateEngine)

默认 Velocity ;可选模板引擎 Beetl 或 Freemarker。

模板引擎代码
Velocity默认.templateEngine(new VelocityTemplateEngine())
Freemarker可选.templateEngine(new FreemarkerTemplateEngine())
Beetl可选.templateEngine(new BeetlTemplateEngine())

代码生成器测试样例

那么知道配置之后我们可以自己写一个操作一下。

步骤:

1、创建测试数据库 mp

CREATE DATABASE mp;USE `mp`;/*Table structure for table `student` */CREATE TABLE `student` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',`name` varchar(50) DEFAULT NULL COMMENT '姓名',`score` double DEFAULT NULL COMMENT '成绩',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Table structure for table `user` */CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',`username` varchar(50) NOT NULL COMMENT '用户名',`password` varchar(50) DEFAULT NULL COMMENT '密码',`create_time` date DEFAULT NULL COMMENT '创建时间',`modify_time` date DEFAULT NULL COMMENT '最后一次修改时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
FieldTypeComment
idint用户id
usernamevarchar(50)用户名
passwordvarchar(50)密码
create_timedate创建时间
modify_timedate最后一次修改时间
FieldTypeComment
idint学号
namevarchar(50)名字
scoredouble成绩

2、创建一个 Spring-Boot 项目

image-20211121144541404

3、在 pom.xml 中导入相关依赖

<!--spring-boot-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringBootTest-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
<!--swagger-->
<dependency><groupId>io.swagger</groupId><artifactId>swagger-annotations</artifactId><version>1.6.3</version>
</dependency>
<!--lombok-->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>
<!--mysql 驱动-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version>
</dependency>
<!--mybatis-plus-->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3.4</version>
</dependency>
<!--mybatis-plus-generator 生成器-->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.1</version>
</dependency>
<!--velocity-->
<dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version>
</dependency>
<!--freemarker-->
<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version>
</dependency>
<!--beetl 模板-->
<dependency><groupId>com.ibeetl</groupId><artifactId>beetl</artifactId><version>3.8.1.RELEASE</version>
</dependency>

注:模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker,实际使用中只导入使用模板对应的依赖即可,不用全部导入。

4、编写一个mian方法,加上框架

public static void main(String[] args) {//1、配置数据源FastAutoGenerator.create("url", "username", "password")//2、全局配置.globalConfig(...)//3、包配置.packageConfig(...)//4、策略配置.strategyConfig(...)//5、模板引擎配置.templateEngine(...)//6、执行.execute();
}

5、进行数据源配置

public static void main(String[] args) {//1、配置数据源FastAutoGenerator.create("jdbc:mysql://localhost:3306/mp", "root", "123456")//2、全局配置.globalConfig(...)//3、包配置.packageConfig(...)//4、策略配置.strategyConfig(...)//5、模板引擎配置.templateEngine(...)//6、执行.execute();
}

6、进行全局配置

注:3.5.1+版本开始支持 lambda 表达式

	//2、全局配置.globalConfig(builder -> {builder.author("Jie") // 设置作者名.outputDir(System.getProperty("user.dir") + "/src/main/java")   //设置输出路径.commentDate("yyyy-MM-dd hh:mm:ss")   //注释日期.dateType(DateType.ONLY_DATE)   //定义生成的实体类中日期的类型 TIME_PACK=LocalDateTime;ONLY_DATE=Date;.fileOverride()   //覆盖之前的文件.enableSwagger()   //开启 swagger 模式.disableOpenDir();   //禁止打开输出目录,默认打开});

7、进行 包配置

	//3、包配置.packageConfig(builder -> {builder.parent("com") // 设置父包名.moduleName("mp")   //设置模块包名.entity("entity")   //pojo 实体类包名.service("service") //Service 包名.serviceImpl("serviceImpl") // ***ServiceImpl 包名.mapper("mapper")   //Mapper 包名.xml("mapper")  //Mapper XML 包名.controller("controller") //Controller 包名.other("utils") //自定义文件包名.pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir")+"/src/main/resources/mapper"))    //配置 **Mapper.xml 路径信息:项目的 resources 目录的 Mapper 目录下});

8、策略配置

策略配置中需要对 Mapper,Service,Entity,Controller 类的生成策略进行单独的配置。

	//4、策略配置.strategyConfig(builder -> {builder.addInclude("user", "student") // 设置需要生成的数据表名.addTablePrefix("t_", "c_") // 设置过滤表前缀//4.1、Mapper策略配置.mapperBuilder().superClass(BaseMapper.class)   //设置父类.formatMapperFileName("%sMapper")   //格式化 mapper 文件名称.enableMapperAnnotation()       //开启 @Mapper 注解.formatXmlFileName("%sXml"); //格式化 Xml 文件名称//4.2、service 策略配置.serviceBuilder().formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService.formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl//4.3、实体类策略配置.entityBuilder().enableLombok() //开启 Lombok.disableSerialVersionUID()  //不实现 Serializable 接口,不生产 SerialVersionUID.logicDeleteColumnName("deleted")   //逻辑删除字段名.naming(NamingStrategy.underline_to_camel)  //数据库表映射到实体的命名策略:下划线转驼峰命.columnNaming(NamingStrategy.underline_to_camel)    //数据库表字段映射到实体的命名策略:下划线转驼峰命.addTableFills(new Column("create_time", FieldFill.INSERT),new Column("modify_time", FieldFill.INSERT_UPDATE))   //添加表字段填充,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间.enableTableFieldAnnotation()       // 开启生成实体时生成字段注解//4.4、Controller策略配置.controllerBuilder().formatFileName("%sController") //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController.enableRestStyle()  //开启生成 @RestController 控制器})

9、模板引擎配置

	//5、模板引擎.templateEngine(new VelocityTemplateEngine())	//默认/*.templateEngine(new FreemarkerTemplateEngine()).templateEngine(new BeetlTemplateEngine())*/

10、执行

	//6、执行.execute();

执行效果演示:

注:这里使用的是附2的交互式生成,两者源码几乎没有区别。

代码自动生成效果

image-20211121162318620

附1:快速生成样例代码


public class Generator {public static void main(String[] args) {//1、配置数据源FastAutoGenerator.create("jdbc:mysql://localhost:3306/yeb", "root", "123456")//2、全局配置.globalConfig(builder -> {builder.author("Jie") // 设置作者名.outputDir(System.getProperty("user.dir") + "/src/main/java")   //设置输出路径:项目的 java 目录下.commentDate("yyyy-MM-dd hh:mm:ss")   //注释日期.dateType(DateType.ONLY_DATE)   //定义生成的实体类中日期的类型 TIME_PACK=LocalDateTime;ONLY_DATE=Date;.fileOverride()   //覆盖之前的文件.enableSwagger()   //开启 swagger 模式.disableOpenDir();   //禁止打开输出目录,默认打开})//3、包配置.packageConfig(builder -> {builder.parent("com") // 设置父包名.moduleName("mp")   //设置模块包名.entity("pojo")   //pojo 实体类包名.service("service") //Service 包名.serviceImpl("serviceImpl") // ***ServiceImpl 包名.mapper("mapper")   //Mapper 包名.xml("mapper")  //Mapper XML 包名.controller("controller") //Controller 包名.other("utils") //自定义文件包名.pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/src/main/resources/mapper"));    //配置 mapper.xml 路径信息:项目的 resources 目录下})//4、策略配置.strategyConfig(builder -> {builder.addInclude("user", "student") // 设置需要生成的数据表名.addTablePrefix("t_", "c_") // 设置过滤表前缀//4.1、Mapper策略配置.mapperBuilder().superClass(BaseMapper.class)   //设置父类.formatMapperFileName("%sMapper")   //格式化 mapper 文件名称.enableMapperAnnotation()       //开启 @Mapper 注解.formatXmlFileName("%sXml")//格式化 Xml 文件名称//4.2、service 策略配置.serviceBuilder().formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService.formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl//4.3、实体类策略配置.entityBuilder().enableLombok() //开启 Lombok.disableSerialVersionUID()  //不实现 Serializable 接口,不生产 SerialVersionUID.logicDeleteColumnName("deleted")   //逻辑删除字段名.naming(NamingStrategy.underline_to_camel)  //数据库表映射到实体的命名策略:下划线转驼峰命.columnNaming(NamingStrategy.underline_to_camel)    //数据库表字段映射到实体的命名策略:下划线转驼峰命.addTableFills(new Column("create_time", FieldFill.INSERT),new Column("modify_time", FieldFill.INSERT_UPDATE))   //添加表字段填充,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间.enableTableFieldAnnotation()       // 开启生成实体时生成字段注解//4.4、Controller策略配置.controllerBuilder().formatFileName("%sController") //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController.enableRestStyle();  //开启生成 @RestController 控制器})//5、模板.templateEngine(new VelocityTemplateEngine())/*.templateEngine(new FreemarkerTemplateEngine()).templateEngine(new BeetlTemplateEngine())*///6、执行.execute();}
}

附2:交互式生成样例代码

public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("=====================数据库配置=======================");System.out.println("请输入 URL");String url = scan.next();System.out.println("请输入 username");String username = scan.next();System.out.println("请输入 password");String password = scan.next();FastAutoGenerator.create(url, username, password)// 全局配置.globalConfig((scanner, builder) -> builder.author(scanner.apply("=====================全局配置=======================\n请输入作者名称?")).outputDir(System.getProperty("user.dir") + "/src/main/java").commentDate("yyyy-MM-dd hh:mm:ss").dateType(DateType.TIME_PACK).enableSwagger().fileOverride().enableSwagger().disableOpenDir())// 包配置.packageConfig((scanner, builder) -> builder.parent(scanner.apply("=====================包配置=======================\n请输入包名?")).moduleName(scanner.apply("请输入父包模块名?")).entity("entity").service("service").serviceImpl("serviceImpl").mapper("mapper").xml("mapper").other("utils").pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir")+"/src/main/resources/mapper")))// 策略配置.strategyConfig((scanner, builder) -> {builder.addInclude(getTables(scanner.apply("=====================策略配置=======================\n请输入表名,多个英文逗号分隔?所有输入 all"))).serviceBuilder().formatServiceFileName("%sService").formatServiceImplFileName("%sServiceImpl").entityBuilder()        //实体类策略配置.enableLombok()         //开启 Lombok.disableSerialVersionUID().logicDeleteColumnName("deleted")        //逻辑删除字段.naming(NamingStrategy.underline_to_camel).columnNaming(NamingStrategy.underline_to_camel).addTableFills(new Column("create_time", FieldFill.INSERT), new Column("modify_time", FieldFill.INSERT_UPDATE)).enableTableFieldAnnotation()       // 开启生成实体时生成字段注解.controllerBuilder().formatFileName("%sController").enableRestStyle().mapperBuilder().superClass(BaseMapper.class).formatMapperFileName("%sMapper").enableMapperAnnotation()       //@mapper.formatXmlFileName("%sMapper");})/*模板引擎配置,默认 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(","));
}

http://www.ppmy.cn/news/26619.html

相关文章

Winform控件开发(14)——NotifyIcon(史上最全)

前言: 先看个气泡提示框的效果: 代码如下: 在一个button中注册click事件,当我们点击button1时,就能显示气泡 private void button1_Click(object sender, EventArgs e){notifyIcon1.Visible = true;notifyIcon1

面试一位软件测试6年工作者:一年经验掰成六年来用....

在众多面试中&#xff0c;对于那个工作了6年的面试者&#xff0c;我印象很深刻&#xff0c;因为最开始拿到简历的时候&#xff0c;我一摸:"这简历&#xff0c;好厚啊&#xff01;"再一看&#xff0c;工作6年。 于是我去找了我的领导&#xff0c;我说:“这人我应该没…

Pytorch GPU版本简明下载安装教程

1.根据自己的显卡型号下载显卡驱动并安装。这一步会更新你的显卡驱动&#xff0c;也可忽略第1步&#xff0c;如果第2步出现问题&#xff0c;返回执行第1步。 点击这里下载英伟达显卡驱动 2.安装完成后&#xff0c;wincmd打开命令行&#xff0c;输入nvidia-smi&#xff0c;查看…

物联网对供应链管理的影响

物联网对于许多行业来说都是一项革命性技术&#xff0c;其应用领域涉及零售、交通、金融、医疗保健和能源等行业。物联网在供应链等流程中已经展示了其深度的潜力。管理、预测和监督应用程序有助于车队运输经理提高配送的运营效率&#xff0c;并增加决策的准确性。如今&#xf…

“互联网+”下劳动关系认定的现状

1. 劳动关系的认定标准。依据目前我国法律的有关规定, 判定劳动关系存在两种情况:其一, 在有书面劳动合同的情况下, 这时应以书面合同作为认定标准;其二, 在没有书面合同的情况下, 则依据2005年劳社部的《关于确立劳动关系有关事项的通知》来认定, 其中第一条:“用人单位招用劳…

【Python--XML文件读写】XML文件读写详解

【Python–XML文件读写】XML文件读写详解 文章目录【Python--XML文件读写】XML文件读写详解1. 前言1.1 介绍1.2 用法2. xml文件内容形式3. xml文件读写3.1 项目框架3.1 写入操作&#xff08;创建&#xff09;&#xff08;create_xml.py&#xff09;3.2 读取操作&#xff08;解析…

固定值电阻的检测方法总结

🏡《总目录》 目录 1,概述2,测量方法3,检测方法3.1,读值3.2,测量3.3,排故4,总结1,概述 本文简单总结固定值电阻的测量与检查方法要点和注意事项。 2,测量方法 对于固定值电阻的测量来讲,直接将万用表红黑表笔分别插入到如下图所示的红色和黑色接线端。然后将万用表…

前缀和差分(C/C++)

目录 1. 前缀和的定义 2. 一维前缀和 2.1 计算公式 2.2 用途 2.3 小试牛刀 3. 二维前缀和 3.1 用途 1. 前缀和的定义 对于一个给定的数列A&#xff0c;他的前缀和数中 S 中 S[ i ] 表示从第一个元素到第 i 个元素的总和。 如下图&#xff1a;绿色区域的和就是前缀和数组…