前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mybatis plus 代码生成器,我们可以配置什么,每一个属性里面咋写,写什么,一句一句的代码解读

mybatis plus 代码生成器,我们可以配置什么,每一个属性里面咋写,写什么,一句一句的代码解读

作者头像
一写代码就开心
发布2021-12-20 12:35:54
1K0
发布2021-12-20 12:35:54
举报
文章被收录于专栏:java和pythonjava和python

目录

背景

在这里插入图片描述
在这里插入图片描述

代码生成器一共有6个配置,每一个配置对象里面有很多的属性,现在开始解读每一个配置对象里面的具体属性代表什么意思

1 dataSourceConfig 数据源配置

在这里插入图片描述
在这里插入图片描述

这个数据源配置里面有8个属性,以MySQL数据库为例

代码语言:javascript
复制
//数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        //驱动连接的URL
        dsc.setUrl("jdbc:mysql://localhost:3306/mybatisplus?useUnicode=true&useSSL=false&characterEncoding=utf8");
        //驱动名称
        dsc.setDriverName("com.mysql.jdbc.Driver");
        //数据库连接用户名
        dsc.setUsername("root");
        //数据库连接密码
        dsc.setPassword("123456");

以上代码里面的4个属性,好理解,固定格式那样写就可以了,其实这个数据源的配置,只配置以上的4个属性就可以了,其他的属性的配置是额外的。

dbType属性

在这里插入图片描述
在这里插入图片描述

我们看源码,这个dbType的参数是什么 参数类型是 DbType,这个是一个枚举类型

在这里插入图片描述
在这里插入图片描述

具体的值我们可以写:

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
  dsc.setDbType(DbType.MYSQL);  //设置数据库类型,比如是MySQL,
  还是oracle的数据库

设置这个属性的目的就是 设置数据库类型 默认是MySQL,我们现在对MySQL数据库进行驱动,可以不配置这个属性

typeConvert属性

为什么设置这个属性

数据库字段类型转化为Java实体类的数据类型,内置转换类型无法满足。 我们需要自定义转换类型,就需要设置这个参数

代码语言:javascript
复制
当生成的model实体类,java类型不满足时可以自定义转换

如何写这个参数

在这里插入图片描述
在这里插入图片描述

我们看看这个属性的参数类型 根据源码看,这个参数类型是一个接口

在这里插入图片描述
在这里插入图片描述

这个接口的实现类有哪些?

在这里插入图片描述
在这里插入图片描述

因为现在的数据库是MySQL,我们使用MySqlTypeConvert这个实现类。

在这里插入图片描述
在这里插入图片描述

既然知道了这个typeConvert这个属性的参数是一个接口,我们也创建了这个接口的实现类,以上代码也创建这个类的对象。但是我们要自定义类型转化,如何实现?

看这个MySqlTypeConvert实现类的源码

在这里插入图片描述
在这里插入图片描述

源码里面已经将数据库字段类型 和 Java实体类字段类型进行了转换,可是源码里面的转换太少,我们想要自定义,所以我们得重写这个方法。并且方法里面的格式要和源码里面的一样

举个例子:

代码语言:javascript
复制
MySQL数据库的datetime这个字段类型,代码生成器里面没有实现转换,
我们现在需要,我们我们自能自定义,我们将数据库的这个类型转为data类型
代码语言:javascript
复制
    //类型转换
        dsc.setTypeConvert(new MySqlTypeConvert() {
            @Override
            public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
                String t = fieldType.toLowerCase();
                if(t.contains("datetime")){
                    return DbColumnType.DATE;
                }


                //其它字段采用默认转换(非mysql数据库可以使用其它默认的数据库转换器)
                return new MySqlTypeConvert().processTypeConvert(globalConfig,fieldType);
            }});

schemaName属性

在这里插入图片描述
在这里插入图片描述

我们看看源码,这个属性的参数类型是什么 是字符串

在这里插入图片描述
在这里插入图片描述

那这个参数可以写什么值? 这个不清楚了,网上找的是说// dsc.setSchemaName(“testMyBatisPlus”); 指定数据库的名字,不用在URL里面写,但是我试了一下,报错,不知道有哪位大佬知道,比如我连接MySQL数据库,这个参数可以是什么

dbQuery属性

在这里插入图片描述
在这里插入图片描述

竟然不需要参数,从官网上看

在这里插入图片描述
在这里插入图片描述

不需要我们再代码里面写,但是这个属性有什么用?有大佬知道吗

2 strategy(这个类是数据库表配置)

一个数据库里面有很多的表,就是对这些表进行配置,也叫策略配置

一般设置几个属性就可以:

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
StrategyConfig stConfig = new StrategyConfig();
stConfig.setCapitalMode(true) //全局大写命名
        .setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
        .setTablePrefix("t_")
        .setInclude("t_student"); // 生成的表,多个表继续传递即可,String类型的可变参数

capitalMode属性

官网解释,官网错误,不是isCapitalMode,应该是capitalMode

在这里插入图片描述
在这里插入图片描述

看源码中这个属性的参数是 Boolean类型

在这里插入图片描述
在这里插入图片描述

stConfig.setCapitalMode(true) //全局大写命名

naming属性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查看源码,找这个参数是什么

在这里插入图片描述
在这里插入图片描述

参数是一个枚举,枚举的值是

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
 .setNaming(NamingStrategy.underline_to_camel)
在这里插入图片描述
在这里插入图片描述

以上设置是驼峰命名,将数据库表名转为驼峰命名

代码语言:javascript
复制
 .setNaming(NamingStrategy.no_change)
在这里插入图片描述
在这里插入图片描述

以上设置是什么都不变,数据库字段是什么,转为pojo实体类就是什么格式

columnNaming属性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

读源码,看参数是什么类型?

在这里插入图片描述
在这里插入图片描述

和nameing属性一样,是元组,具体看nameing属性里面的介绍

那这个属性写了与没写有什么区别? 对表里面的字段进行是否转为驼峰命名。

tablePrefix属性

比如数据库表有前缀,生成的实体类对象的名字要把这个前缀去掉,那么就把前缀作为参数给这个属性,生成的实体类就去掉了前缀

在这里插入图片描述
在这里插入图片描述

数据库表前缀是 t_

在这里插入图片描述
在这里插入图片描述

设置了这个属性 最后生成的表名是:

在这里插入图片描述
在这里插入图片描述

fieldPrefix 属性

设置这个属性,实体类里面去掉字段的前缀 这个属性的参数可以传多个参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

include属性

在这里插入图片描述
在这里插入图片描述

一个数据库里面有多个表,想要选择特定的表进行生成代码,就设置这个属性,里面的参数是表名

在这里插入图片描述
在这里插入图片描述

exclude属性

在这里插入图片描述
在这里插入图片描述

一个数据库里面有多个表,想要排除一些特定的表进行生成代码,就设置这个属性,里面的参数是表名

在这里插入图片描述
在这里插入图片描述

skipView属性

在这里插入图片描述
在这里插入图片描述

看这个属性的源码,参数是Boolean,默认是false。

数据库现在有一个视图,我们不设置这个属性,那么默认是false,不会跳过这个视图,会生成实体类。前提是不设置include属性,因为只要设置了这个属性,只会生成这个include属性里面的表。

在这里插入图片描述
在这里插入图片描述

不设置include属性,并且不设置skipView属性,数据库中有视图,最后执行代码,生成了这个视图的实体类

在这里插入图片描述
在这里插入图片描述

不设置include属性,并且设置skipView属性为TRUE,数据库中有视图,最后执行代码

在这里插入图片描述
在这里插入图片描述

数据库中有实体,设置了这个属性为TRUE,没有生成这个视图的实体类

entityLombokModel属性

在这里插入图片描述
在这里插入图片描述

我们设置为true,

在这里插入图片描述
在这里插入图片描述

在生成的实体类上面,就会生成lombok的注解

在这里插入图片描述
在这里插入图片描述

entitySerialVersionUID属性

默认是true,我们不管这个属性,会在生成的实体类里面生成这个

在这里插入图片描述
在这里插入图片描述

如果手动设置为false,那么

在这里插入图片描述
在这里插入图片描述

实体类里面的那个就不会生成了

entityColumnConstant属性

在这里插入图片描述
在这里插入图片描述

如果我们手动设置为true,

在这里插入图片描述
在这里插入图片描述

生成的实体类里面,会多这个

在这里插入图片描述
在这里插入图片描述

以上这个是表里面每一个字段的静态变量。在业务层可疑直接使用类名.静态变量名,获取到数据库里面的字段名字。

不清楚获取到有什么用,有知道的吗?欢迎评论里面解答

EntityBooleanColumnRemoveIsPrefix属性

在这里插入图片描述
在这里插入图片描述

但是MySQL数据库是没有Boolean类型的,

也就是说 mysql把boolean=tinyInt(1) 了。 MYSQL保存boolean值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint(1)。

所以,知道是去除is前缀的就可以,我们MySQL不使用这个属性

entityTableFieldAnnotationEnable属性

在这里插入图片描述
在这里插入图片描述

默认为false

当我们设置了true

在这里插入图片描述
在这里插入图片描述

生成的实体类里面的每一个字段上面 都有mybatisplus的字段注解

在这里插入图片描述
在这里插入图片描述

controllerMappingHyphenStyle属性

在这里插入图片描述
在这里插入图片描述

参数是Boolean类型,默认是false 数据库字段是驼峰,我们设置为true之后,转为的实体类里面就是变为下划线的字符串,比如 数据库中字段是dFu,生成的实体类里面字段变为 d_fu

3 packageInfo配置(包名配置)

这个配置下有很多的属性

在这里插入图片描述
在这里插入图片描述

我们的每一层就是一个文件夹,就是一个包,现在就是设置这个包的名字的,

代码语言:javascript
复制
// 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com")
                .setMapper("mapper")
                .setService("service")
                .setController("controller")
                .setEntity("pojo")
                .setXml("mapper");
在这里插入图片描述
在这里插入图片描述

以上就是生成的包名

moduleName属性

父包里面的模块名

代码语言:javascript
复制
        pc.setModuleName("blog")
                .setParent("com")
                .setMapper("mapper")
                .setService("service")
                .setController("controller")
                .setEntity("pojo")
                .setServiceImpl("Impll")
                .setXml("mapper");

以上代码父包是com,里面有一个模块blog,这个模块下才是各个层

在这里插入图片描述
在这里插入图片描述

serviceImpl属性

在这里插入图片描述
在这里插入图片描述

生成的是:

在这里插入图片描述
在这里插入图片描述

pathInfo属性

这个属性不知道干嘛的,好像没用

4 template 模板配置

在这里插入图片描述
在这里插入图片描述

5 globalConfig 全局策略 globalConfig 配置

在这里插入图片描述
在这里插入图片描述

outputDir属性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

首先获取项目根目录,就是你的项目在哪个文件夹下,那个文件夹的路径

当前输出的根目录是:

代码语言:javascript
复制
G:\导出\源码

我们利用这个代码生成器是生成controller层,mapper层,pojo层,service层,这个层的文件夹要生成在哪里? 就是利用这个配置,配置输出的路径

代码语言:javascript
复制
   //全局配置策略
        GlobalConfig gc = new GlobalConfig();
        String path = System.getProperty("user.dir");//动态获取当前项目的路径
        System.out.println(path);
        gc.setOutputDir(path+"/03_mp_code/src");

author属性

如果不写这个属性,生成的文件上是

在这里插入图片描述
在这里插入图片描述

如果写了这个属性

在这里插入图片描述
在这里插入图片描述

生成的文件上是:

在这里插入图片描述
在这里插入图片描述

open属性

在这里插入图片描述
在这里插入图片描述

默认为TRUE,我们一执行完这个生成的代码,就会打开生成的文件所在的文件夹。 没什么用,我们手动设置为FALSE

fileOverride属性

在这里插入图片描述
在这里插入图片描述

如果我们一直执行生成代码的这个文件,是否覆盖之前同名的,默认是false,不覆盖,我们可以不写这个,一般就是不覆盖,如果你想每一次生成,都覆盖之前生成的,就改为TRUE。我是一般就是默认。

在这里插入图片描述
在这里插入图片描述

设置名字格式的属性

在这里插入图片描述
在这里插入图片描述

这些属性都是,只是生成不同层的名字格式。

如果不设置这些属性,那么生成的是

在这里插入图片描述
在这里插入图片描述

格式就是 表名+ 每层的后缀

如果设置了某一个

在这里插入图片描述
在这里插入图片描述

生成的是:

在这里插入图片描述
在这里插入图片描述

设置的参数中%s 就是数据库的表名

idType属性

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
gc.setIdType(IdType.AUTO);//设置主键策略

这个属性的参数是一个枚举类型(看源码可知)

在这里插入图片描述
在这里插入图片描述

具体的枚举值是:(看源码可知)

在这里插入图片描述
在这里插入图片描述

我们一般设置

代码语言:javascript
复制
gc.setIdType(IdType.AUTO);//设置主键策略

写了这个,执行之后,生成的实体类主键就会有一个注解

在这里插入图片描述
在这里插入图片描述

dateType属性

//定义生成的实体类中日期类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

看源码,知道参数是: 是枚举

在这里插入图片描述
在这里插入图片描述

枚举的具体值是:

在这里插入图片描述
在这里插入图片描述

例子

数据库表这三个字段类型是:

在这里插入图片描述
在这里插入图片描述

我们生成的代码里面不设置这个属性,这个属性默认是TIME_PACK

我们看实体类里面生成的字段类型:

在这里插入图片描述
在这里插入图片描述

如果设置了这个属性:

代码语言:javascript
复制
 gc.setDateType(DateType.ONLY_DATE);
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
如果设置为:
 gc.setDateType(DateType.SQL_PACK);

生成的实体类时间:

在这里插入图片描述
在这里插入图片描述

总结

根据以上3个参数,生成的实体类格式,我们一般会在这个生成代码里面写

代码语言:javascript
复制
gc.setDateType(DateType.ONLY_DATE);

swagger2属性

在这里插入图片描述
在这里插入图片描述

参数是Boolean类型,看自己想不想生成,其实就是生成swagger的注解,放到对应的位置。

试了一下,改为TRUE,只是生成实体类上面的swagger注解 其他地方没有生成

在这里插入图片描述
在这里插入图片描述

所以这个没什么用,就一个注解,我们手动也可以生成,所以不需要管这个属性。

enableCache属性

在这里插入图片描述
在这里插入图片描述

当我们改为TRUE,生成的xml文件里面,就多了这句话:

在这里插入图片描述
在这里插入图片描述

activeRecord属性

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
   gc.setActiveRecord(true);// 不需要ActiveRecord特性的请改为false

这个就是实体类实现crud。是否需要生成这个。 变为TRUE,实体类就继承 model。不然不继承

在这里插入图片描述
在这里插入图片描述

baseResultMap属性

默认FALSE,如果开启,在生成的xml里面就会生成

不然是没有以下的东西的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

baseColumnList属性

默认FALSE,设为TRUE

在这里插入图片描述
在这里插入图片描述

在xml里面生成

在这里插入图片描述
在这里插入图片描述

好像没有什么用,我一般不管这个属性,默认为false.

kotlin属性

在这里插入图片描述
在这里插入图片描述

不知道这个属性干什么,因为默认是false,所以不用管了。

如果有知道的,评论里面告我一下啦

6 injectionConfig 注入 injectionConfig 配置

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-12-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 背景
  • 1 dataSourceConfig 数据源配置
    • dbType属性
      • typeConvert属性
        • 为什么设置这个属性
        • 如何写这个参数
      • schemaName属性
        • dbQuery属性
        • 2 strategy(这个类是数据库表配置)
          • capitalMode属性
            • naming属性
              • columnNaming属性
                • tablePrefix属性
                  • fieldPrefix 属性
                    • include属性
                      • exclude属性
                        • skipView属性
                          • entityLombokModel属性
                            • entitySerialVersionUID属性
                              • entityColumnConstant属性
                                • EntityBooleanColumnRemoveIsPrefix属性
                                  • entityTableFieldAnnotationEnable属性
                                    • controllerMappingHyphenStyle属性
                                    • 3 packageInfo配置(包名配置)
                                      • moduleName属性
                                        • serviceImpl属性
                                          • pathInfo属性
                                          • 4 template 模板配置
                                          • 5 globalConfig 全局策略 globalConfig 配置
                                            • outputDir属性
                                              • author属性
                                                • open属性
                                                  • fileOverride属性
                                                    • 设置名字格式的属性
                                                      • idType属性
                                                        • dateType属性
                                                          • 例子
                                                          • 总结
                                                        • swagger2属性
                                                          • enableCache属性
                                                            • activeRecord属性
                                                              • baseResultMap属性
                                                                • baseColumnList属性
                                                                  • kotlin属性
                                                                  • 6 injectionConfig 注入 injectionConfig 配置
                                                                  相关产品与服务
                                                                  云数据库 SQL Server
                                                                  腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                                                                  领券
                                                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档