当前位置: 首页 > news >正文

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

文章目录

    • 配置
      • 数据源配置(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.lryc.cn/news/13934.html

相关文章:

  • 宁盾上榜第五版《CCSIP 2022 中国网络安全行业全景册》
  • 【Linux系统】第七篇:Linux调试器gdb的使用
  • Shell 特殊变量及其含义
  • LeetCode 2396. 严格回文的数字
  • 【RocketMQ】源码详解:Broker启动流程
  • vue事件
  • 研报精选230220
  • kubernetes sd configs配置详解
  • Linux查看文件的命令
  • 如何单独清除某个网页的缓存(reload)
  • 魔兽世界经典怀旧服务器架设教程
  • Interview系列 - 05 Java|Iterator迭代器|集合继承体系|Set List Map接口特性|List实现类区别
  • LeetCode 1769. 移动所有球到每个盒子所需的最小操作数
  • MKS SKIPR V1.0船长版(Voron 2.4 R2)配置简要笔记
  • 90后,转行软件测试3年,从月入7000+到月入过万,整理出的这一万字经验分享。
  • Java之关于String字符串笔试面试重点
  • mdio协议
  • kubectl命令
  • 题库-JAVASE01
  • Java序列化机制
  • 3款强大到离谱电脑软件,都是效率神器,从此远离加班
  • 【项目】Vue3+TS CMS 登录模块搭建
  • Java 8 的那些常见写法
  • PyQt5数据库开发1 4.3 QSqlTableModel 之 相关槽函数的实现(多图长文详解)
  • QT 设计一个串口调试工具,用一个工程就能轻松解决,外加虚拟串口工具模拟调试,在日常工作中可类比模块间通信,非常详细建议收藏
  • OpenSumi 是信创开发云的首选
  • JdbcTemplate常用方法解析
  • 生物素标记试剂1869922-24-6,Alkyne-PEG3-Biotin PC,炔烃PEG3生物素PC
  • CS224W课程学习笔记(三):DeepWalk算法原理与说明
  • rk3568 开发板Ubuntu系统说明