MyBatis Plus 3.5.x版本自动生成代码,完善版

 一、环境:
Java:11
MyBatis Plus:3.5.1
MyBatis Plus Generator:3.5.1
MPJ:1.2.3

 二、适用以上版本的代码生成工具类

package com.hkl.mpjoin.utils;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.IFill;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.fill.Property;
import com.hkl.controller.BaseController;

import java.util.Collections;
import java.util.List;

/**
 * <p>Description:MP代码生成器-3.5.x完善版(推荐)</p>
 * <p>Author:hkl</p>
 * <p>Date:2022/8/27</p>
 */
public class MPCodeGenerator {


    public static void main(String[] args) {
        //模块名,必填
        String moduleName = "finance";

        //需要生成的表名,必填
        List<String> tables = ListUtil.toList("t_user_info");

        //去除表前缀,非必填
        String offSetTablePrefix = "t_";

        //属性值填充策略,非必填
        List<IFill> tableFillList = ListUtil.toList(
                new Property("createDate", FieldFill.INSERT),
                new Property("updateDate", FieldFill.INSERT_UPDATE)
        );

        if (StrUtil.isBlank(moduleName) || CollUtil.isEmpty(tables)) {
            System.out.println("请输入模块名和需要生成的表名!");
            return;
        }




        String projectPath = System.getProperty("user.dir") + "/mybatis-plus-join-practice";
        //全局配置
        GlobalConfig config = new GlobalConfig.Builder()
                .author("hkl")                                      //作者
                .outputDir(projectPath + "/src/main/java")          //生成文件输出路径(写到java目录)
                .enableSwagger()                                    //开启swagger
                .commentDate("yyyy-MM-dd")                          //注释日期格式
                .fileOverride()                                     //覆盖文件(需谨慎使用)
                .dateType(DateType.ONLY_DATE)                       //设置时间对应类型
                .disableOpenDir()                                   //生成后不要打开目录
                .build();

        //包名配置
        PackageConfig packageConfig = new PackageConfig.Builder()
                .parent("com.hkl.mpjoin.modules")
                .moduleName(moduleName)
                .controller("controller")
                .service("service")
                .serviceImpl("service.impl")
                .entity("entity")
                .mapper("mapper")
                .xml("mapper")
                .pathInfo(Collections.singletonMap(OutputFile.mapperXml, projectPath + "/src/main/resources/mapper/" + moduleName))
                .build();

        //策略配置
        StrategyConfig strategyConfig = new StrategyConfig.Builder()
                .addTablePrefix(offSetTablePrefix)                  //需要抵消的表前缀
                .addInclude(tables)                                 //设置生成需要映射的表名
                //.enableCapitalMode()                              //策略开启⼤写命名
                .serviceBuilder()                                   //构建Service层
                .formatServiceFileName("%sService")                 //业务层接口类命名
                .formatServiceImplFileName("%sServiceImpl")         //业务层接口实现类命名
                .entityBuilder()                                    //构建实体类
                .columnNaming(NamingStrategy.underline_to_camel)    //字段名驼峰命名
                .naming(NamingStrategy.underline_to_camel)          //表名驼峰命名
                .enableLombok()                                     //添加lombock的getter、setter注解
                .enableChainModel()                                 //启动链式写法@Accessors(chain = true)
                .enableColumnConstant()                             //启动属性转常量功能@FieldNameConstants
                .logicDeleteColumnName("deleted")                   //逻辑删除字段,标记@TableLogic
                .enableTableFieldAnnotation()                       //启动字段注解
                .addTableFills(tableFillList)                       //属性值填充策略
                .controllerBuilder()                                //构建Controller类
                .enableHyphenStyle()                                //映射路径使用连字符格式,而不是驼峰
                .formatFileName("%sController")                     //Controller类命名
                .superClass(BaseController.class)                   //Controller 类继承 BaseController
                .enableRestStyle()                                  //标记@RestController注解
                .mapperBuilder()                                    //构建mapper接口类
                .enableBaseResultMap()                              //生成基本的resultMap
                .formatMapperFileName("%sMapper")                   //Mapper接口类明名
                .superClass(BaseMapper.class)                       //Mapper接口类集成 BaseMapper
                .enableMapperAnnotation()                           //标记@Mapper注解
                .formatXmlFileName("%sMapper")                      //Mapper.xml命名
                .enableBaseColumnList()                             //生成基本的SQL片段
                .build();

        //数据源配置
        DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig
                .Builder(
                "jdbc:mysql://xxxIP:3306/test_db_one?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&autoReconnectForPools=true&serverTimezone=Asia/Shanghai",
                "hkl",
                "test@1234");
        dataSourceConfigBuilder.typeConvert(new MySqlTypeConvert() {
            @Override
            public IColumnType processTypeConvert(GlobalConfig globalConfig, String tableField) {
                if (tableField.toLowerCase().contains("date") || tableField.toLowerCase().contains("timestamp") || tableField.toLowerCase().contains("datetime")) {
                    return DbColumnType.DATE;
                }
                return super.processTypeConvert(globalConfig, tableField);
            }
        });

        //创建代码生成器对象,加载配置
        AutoGenerator autoGenerator = new AutoGenerator(dataSourceConfigBuilder.build());
        autoGenerator.global(config);
        autoGenerator.packageInfo(packageConfig);
        autoGenerator.strategy(strategyConfig);

        //执行
        autoGenerator.execute();
        System.out.println("========================================  Done 相关代码生成完毕  =====================================");
    }

}

备注:
1、以上代码亲测可以生成,使用时候只需要更改相应的模块名、包名、数据源即可
2、生成的类文件如下:

3、类内容如下:

package com.hkl.mpjoin.modules.finance.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;
import lombok.experimental.FieldNameConstants;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * <p>
 * 用户基础信息表
 * </p>
 *
 * @author hkl
 * @since 2022-11-11
 */
@Getter
@Setter
@Accessors(chain = true)
@FieldNameConstants
@TableName("t_user_info")
@ApiModel(value = "UserInfo对象", description = "用户基础信息表")
public class UserInfo implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty("主键id")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @ApiModelProperty("姓名")
    @TableField("user_name")
    private String userName;

    @ApiModelProperty("密码")
    @TableField("pwd")
    private String pwd;

    @ApiModelProperty("邮箱")
    @TableField("email")
    private String email;

    @ApiModelProperty("价格")
    @TableField("price")
    private BigDecimal price;

    @ApiModelProperty("是否有效(0否,1是)")
    @TableField("is_enable")
    private Boolean isEnable;

    @ApiModelProperty("备注")
    @TableField("remark")
    private String remark;

    @ApiModelProperty("是否已删除,0-未删除,1-已删除")
    @TableField("deleted")
    //@TableLogic
    private Boolean deleted;

    @ApiModelProperty("创建人Id")
    @TableField("create_by")
    private Long createBy;

    @ApiModelProperty("创建时间")
    @TableField("create_date")
    private Date createDate;

    @ApiModelProperty("修改人Id")
    @TableField("update_by")
    private Long updateBy;

    @ApiModelProperty("修改时间")
    @TableField("update_date")
    private Date updateDate;


    //结论为 selectAs 目标as属性要么是个新属性,要么需要在 selectAll 中把目标as的属性忽略掉
    @ApiModelProperty("测试selectAs")
    @TableField(exist = false)
    private String remarkStr;


    public UserInfo(Long id, String userName) {
        this.id = id;
        this.userName = userName;
    }
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值