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

背景

在这里插入图片描述

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

1 dataSourceConfig 数据源配置

在这里插入图片描述
这个数据源配置里面有8个属性,以MySQL数据库为例

//数据源配置
        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,这个是一个枚举类型
在这里插入图片描述

具体的值我们可以写:
在这里插入图片描述

  dsc.setDbType(DbType.MYSQL);  //设置数据库类型,比如是MySQL,
  还是oracle的数据库

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

typeConvert属性

为什么设置这个属性

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

当生成的model实体类,java类型不满足时可以自定义转换

如何写这个参数

在这里插入图片描述
我们看看这个属性的参数类型
根据源码看,这个参数类型是一个接口
在这里插入图片描述
这个接口的实现类有哪些?
在这里插入图片描述
因为现在的数据库是MySQL,我们使用MySqlTypeConvert这个实现类。
在这里插入图片描述
既然知道了这个typeConvert这个属性的参数是一个接口,我们也创建了这个接口的实现类,以上代码也创建这个类的对象。但是我们要自定义类型转化,如何实现?

看这个MySqlTypeConvert实现类的源码

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

举个例子:

MySQL数据库的datetime这个字段类型,代码生成器里面没有实现转换,
我们现在需要,我们我们自能自定义,我们将数据库的这个类型转为data类型
    //类型转换
        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(这个类是数据库表配置)

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

一般设置几个属性就可以:
在这里插入图片描述

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属性

在这里插入图片描述

在这里插入图片描述
查看源码,找这个参数是什么

在这里插入图片描述
参数是一个枚举,枚举的值是

在这里插入图片描述

 .setNaming(NamingStrategy.underline_to_camel)

在这里插入图片描述

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

 .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配置(包名配置)

这个配置下有很多的属性
在这里插入图片描述
我们的每一层就是一个文件夹,就是一个包,现在就是设置这个包的名字的,

// 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com")
                .setMapper("mapper")
                .setService("service")
                .setController("controller")
                .setEntity("pojo")
                .setXml("mapper");

在这里插入图片描述
以上就是生成的包名

moduleName属性

父包里面的模块名

        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属性

在这里插入图片描述
在这里插入图片描述
首先获取项目根目录,就是你的项目在哪个文件夹下,那个文件夹的路径

当前输出的根目录是:

G:\导出\源码

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

   //全局配置策略
        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属性

在这里插入图片描述

gc.setIdType(IdType.AUTO);//设置主键策略

这个属性的参数是一个枚举类型(看源码可知)
在这里插入图片描述
具体的枚举值是:(看源码可知)
在这里插入图片描述
我们一般设置

gc.setIdType(IdType.AUTO);//设置主键策略

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

在这里插入图片描述

dateType属性

//定义生成的实体类中日期类型
在这里插入图片描述
在这里插入图片描述
看源码,知道参数是:
是枚举
在这里插入图片描述
枚举的具体值是:

在这里插入图片描述

例子

数据库表这三个字段类型是:
在这里插入图片描述
我们生成的代码里面不设置这个属性,这个属性默认是TIME_PACK

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

在这里插入图片描述

如果设置了这个属性:

 gc.setDateType(DateType.ONLY_DATE);

在这里插入图片描述

如果设置为:
 gc.setDateType(DateType.SQL_PACK);

生成的实体类时间:

在这里插入图片描述

总结

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

gc.setDateType(DateType.ONLY_DATE);

swagger2属性

在这里插入图片描述
参数是Boolean类型,看自己想不想生成,其实就是生成swagger的注解,放到对应的位置。

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

在这里插入图片描述
所以这个没什么用,就一个注解,我们手动也可以生成,所以不需要管这个属性。

enableCache属性


在这里插入图片描述
当我们改为TRUE,生成的xml文件里面,就多了这句话:
在这里插入图片描述

activeRecord属性

在这里插入图片描述

   gc.setActiveRecord(true);// 不需要ActiveRecord特性的请改为false

这个就是实体类实现crud。是否需要生成这个。
变为TRUE,实体类就继承 model。不然不继承
在这里插入图片描述

baseResultMap属性

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

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

在这里插入图片描述

在这里插入图片描述

baseColumnList属性

默认FALSE,设为TRUE

在这里插入图片描述
在xml里面生成

在这里插入图片描述
好像没有什么用,我一般不管这个属性,默认为false.

kotlin属性

在这里插入图片描述
不知道这个属性干什么,因为默认是false,所以不用管了。

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

6 injectionConfig 注入 injectionConfig 配置

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一写代码就开心

你的打赏将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值