前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mybatis-plus代码生成器(二)

mybatis-plus代码生成器(二)

作者头像
阿超
发布2022-08-17 20:40:47
4810
发布2022-08-17 20:40:47
举报
文章被收录于专栏:快乐阿超快乐阿超

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

之前写过一篇,不过当时是快照版直接跑在源码环境里,今天我们使用最新的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
        }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档