mybatis-plus代码生成器(二)

2022-08-17 20:40:47 浏览数 (1)

没有斗争就没有功绩,没有功绩就没有奖赏,而没有行动就没有生活——别林斯基

之前写过一篇,不过当时是快照版直接跑在源码环境里,今天我们使用最新的api,并且使用GAV引入

代码语言:javascript复制
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.1</version>
</dependency>

代码:

代码语言:javascript复制
package com.ruben;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.TemplateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.jupiter.api.Test;

/**
 * 生成器配置
 *
 * @author <achao1441470436@gmail.com>
 * @since 2021/10/5 16:38
 */
public class GeneratorTests {

    /**
     * 生成代码的表名
     */
    private static final String TABLE_NAME = "user_info";

    /**
     * 数据库相关配置
     */
    private static final String JDBC_URL = "jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&nullCatalogMeansCurrent=true&serverTimezone=Asia/Shanghai";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "root";

    /**
     * 注释显示的作者
     */
    private static final String AUTHOR = "<achao1441470436@gmail.com>";

    /**
     * 代码生成指定包名
     */
    private static final String PACKAGE_NAME = "com.ruben";

    /**
     * 指定代码生成路径
     */
    private static final String OUTPUT_DIR = "D:\file\tmp\generator\output";

    /**
     * 模板存放路径
     */
    private static final String TEMPLATE_PATH = "./static/generator/";

    @Test
    public void generate() {
        System.out.println(OUTPUT_DIR);
        FastAutoGenerator.create(new DataSourceConfig.Builder(JDBC_URL, USERNAME, PASSWORD))
                // 全局配置
                .globalConfig(builder -> builder.author(AUTHOR).fileOverride().outputDir(OUTPUT_DIR))
                // 包配置
                .packageConfig(builder -> builder.parent(PACKAGE_NAME))
                // 策略配置
                .strategyConfig(builder -> builder
                        // 指定表名,如不指定,则默认生成所有
//                        .addInclude(TABLE_NAME)
                        .controllerBuilder().enableRestStyle()
                        .serviceBuilder()
                        .entityBuilder()
                        // 指定父类
                        .superClass(PACKAGE_NAME   ".pojo.common.BaseEntity")
                        // 添加父类字段
                        .addSuperEntityColumns("is_deleted", "gmt_create", "gmt_modified", "tenant_id")
                        // 开启AR模式
                        .enableActiveRecord()
                        // ID类型,这里IdType是个枚举
                        .idType(IdType.AUTO)
                        // 表名命名转换,这里是下划线转驼峰
                        .naming(NamingStrategy.underline_to_camel)
                        // 表字段名转换,下划线转驼峰
                        .columnNaming(NamingStrategy.underline_to_camel)
                        // 开启lombok
                        .enableLombok()
                        // 开启链式编程 (与BeanCopier冲突)
                        .enableChainModel())
                // 不生成xml
                .templateConfig(builder -> builder.disable(TemplateType.XML)
                        .controller(TEMPLATE_PATH   "controller.java.vm")
                        .entity(TEMPLATE_PATH   "entity.java.vm")
                        .mapper(TEMPLATE_PATH   "mapper.java.vm")
                        .service(TEMPLATE_PATH   "service.java.vm")
                        .serviceImpl(TEMPLATE_PATH   "serviceImpl.java.vm")
                )
                // 自定义模板位置
                .execute();
    }
}

以及自己使用的controller的模板:

代码语言:javascript复制
package ${package.Controller};



#if(${restControllerStyle})
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruben.pojo.common.Result;
import ${package.Entity}.${entity};
import ${package.Service}.${table.serviceName};
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
#else
import org.springframework.stereotype.Controller;
#end
#if(${superControllerClassPackage})
import ${superControllerClassPackage};
#end

/**
 * <p>
 * $!{table.comment} 前端控制器
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
#if(${restControllerStyle})
@RestController
#else
@Controller
#end
@RequestMapping("#if(${package.ModuleName})/${package.ModuleName}#end/#if(${controllerMappingHyphenStyle})${controllerMappingHyphen}#else${table.entityPath}#end")
#if(${kotlin})
class ${table.controllerName}#if(${superControllerClass}) : ${superControllerClass}()#end

#else
#if(${superControllerClass})
public class ${table.controllerName} extends ${superControllerClass} {
#else
public class ${table.controllerName} {
#end
    #set($serviceBeanName = $table.serviceName.substring(1,2).toLowerCase()   $table.serviceName.substring(2))
    #set($entityName = $entity.substring(0,1).toLowerCase()   $entity.substring(1))

    @Resource
    private ${table.serviceName} ${serviceBeanName};

    /**
     * 查询单条记录
     *
     * @param id 主键
     * @return 记录
     * @since ${date}
     * @author ${author}
     */
    @GetMapping
    public Result get(@RequestParam("id") Long id){
         return Result.ok().data(${entity}.builder().build().setId(id).selectById());
    }

    /**
     * 查询列表
     *
     * @param page 分页参数?size=10&current=1
     * @return 分页结果
     * @since ${date}
     * @author ${author}
     */
    @GetMapping("page")
    public Result page(Page<${entity}> page, ${entity} ${entityName}){
        return Result.ok().data(${entityName}.selectPage(page,Wrappers.lambdaQuery(${entityName})));
    }

    /**
     * 新增
     *
     * @param ${entityName} 数据
     * @since ${date}
     * @author ${author}
     */
    @PostMapping
    public Result insert(@RequestBody @Validated ${entity} ${entityName}){
        ${entityName}.insert();
        return Result.ok();
    }

    /**
     * 更新不为null的部分
     *
     * @param ${entityName} 数据
     * @since ${date}
     * @author ${author}
     */
    @PatchMapping
    public Result updateSelective(@RequestBody @Validated ${entity} ${entityName}){
        ${entityName}.updateById();
        return Result.ok();
    }

    /**
     * 根据主键删除
     *
     * @param id 主键
     * @since ${date}
     * @author ${author}
     */
    @DeleteMapping
    public Result delete(@RequestParam("id") Long id){
        ${entity}.builder().build().setId(id).deleteById();
        return Result.ok();
    }


}

#end

entity

代码语言:javascript复制
package ${package.Entity};

#foreach($pkg in ${table.importPackages})
import ${pkg};
#end
#if(${swagger2})
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
#end
#if(${entityLombokModel})
import lombok.*;
    #if(${chainModel})
    import lombok.experimental.Accessors;
    #end
#end

/**
 * <p>
 * $!{table.comment}
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
#if(${entityLombokModel})
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
    #if(${chainModel})
    @Accessors(chain = true)
    #end
    #if(${superEntityClass})
    @EqualsAndHashCode(callSuper = true)
    #else
    @EqualsAndHashCode(callSuper = false)
    #end
#end
#if(${table.convert})
@TableName("${table.name}")
#end
#if(${swagger2})
@ApiModel(value = "${entity}对象", description = "$!{table.comment}")
#end
#if(${superEntityClass})
public class ${entity} extends ${superEntityClass}#if(${activeRecord})<${entity}>#end {
#elseif(${activeRecord})
public class ${entity} extends Model<${entity}> {
#else
public class ${entity} implements Serializable{
#end

#if(${entitySerialVersionUID})
private static final long serialVersionUID=1L;
#end
## ----------  BEGIN 字段循环遍历  ----------
#foreach($field in ${table.fields})

    #if(${field.keyFlag})
        #set($keyPropertyName=${field.propertyName})
    #end
    #if("$!field.comment" != "")
        #if(${swagger2})
        @ApiModelProperty(value = "${field.comment}")
        #else
        /**
         * ${field.comment}
         */
        #end
    #end
    #if(${field.keyFlag})
        ## 主键
        #if(${field.keyIdentityFlag})
        @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
        #elseif(!$null.isNull(${idType}) && "$!idType" != "")
        @TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
        #elseif(${field.convert})
        @TableId("${field.annotationColumnName}")
        #end
        ## 普通字段
    #elseif(${field.fill})
        ## -----   存在字段填充设置   -----
        #if(${field.convert})
        @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
        #else
        @TableField(fill = FieldFill.${field.fill})
        #end
    #elseif(${field.convert})
    @TableField("${field.annotationColumnName}")
    #end
    ## 乐观锁注解
    #if(${field.versionField})
    @Version
    #end
    ## 逻辑删除注解
    #if(${field.logicDeleteField})
    @TableLogic
    #end
private ${field.propertyType} ${field.propertyName};
#end
## ----------  END 字段循环遍历  ----------

#if(!${entityLombokModel})
    #foreach($field in ${table.fields})
        #if(${field.propertyType.equals("boolean")})
            #set($getprefix="is")
        #else
            #set($getprefix="get")
        #end

    public ${field.propertyType} ${getprefix}${field.capitalName}(){
            return ${field.propertyName};
            }

        #if(${chainModel})
        public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}){
        #else
        public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
        #end
            this.${field.propertyName} = ${field.propertyName};
        #if(${chainModel})
                return this;
        #end
            }
    #end
    ## --foreach end---
#end
## --end of #if(!${entityLombokModel})--

#if(${entityColumnConstant})
    #foreach($field in ${table.fields})
    public static final String ${field.name.toUpperCase()} ="${field.name}";

    #end
#end
#if(${activeRecord} && !${superEntityClass} )
@Override
protected Serializable pkVal(){
    #if(${keyPropertyName})
            return this.${keyPropertyName};
    #else
            return null;
    #end
        }

#end
#if(!${entityLombokModel})
@Override
public String toString() {
        return "${entity}{"  
    #foreach($field in ${table.fields})
        #if($!{foreach.index}==0)
                "${field.propertyName}="   ${field.propertyName}  
        #else
                ", ${field.propertyName}="   ${field.propertyName}  
        #end
    #end
        "}";
        }
#end
        }

0 人点赞