栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

    //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)路径配置信息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`;



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;



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 项目

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

    org.springframework.boot
    spring-boot-starter-web



    org.springframework.boot
    spring-boot-starter-test
    test



    io.swagger
    swagger-annotations
    1.6.3



    org.projectlombok
    lombok



    mysql
    mysql-connector-java
    8.0.26



    com.baomidou
    mybatis-plus-boot-starter
    3.4.3.4



    com.baomidou
    mybatis-plus-generator
    3.5.1



    org.apache.velocity
    velocity-engine-core
    2.3



    org.freemarker
    freemarker
    2.3.31



    com.ibeetl
    beetl
    3.8.1.RELEASE

注:模板引擎配置,默认 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())	//默认
    
10、执行
	//6、执行
	.execute();
执行效果演示:

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

附1:快速生成样例代码
public static void main(String[] args) {
    //1、配置数据源
    FastAutoGenerator.create("jdbc:mysql://localhost:3306/mp", "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("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 目录下
        })
        //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())
        
        //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");
        })
        
        .execute();
}

// 处理 all 情况
protected static List getTables(String tables) {
    return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/581955.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号