名称 版本
mybatis-plus 3.5.3.1
jdk 1.8

Maven依赖


    <dependencies>
        <!--mysql驱动包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>8.0.28</version>
        </dependency>
        <!--mybatis-plus驱动包-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-annotation</artifactId>
            <scope>compile</scope>
        </dependency>
        <!--模板引擎-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
        <!--配置ApiModel在实体类中不生效-->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>spring-boot-starter-swagger</artifactId>
            <version>1.5.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <!--freemarker-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
        </dependency>
    </dependencies>

代码实现

Main方法

public class CommonToolApplication {


    /**
     * 当前要生成的模块
     */
    private static final ModuleEnum TO_GENERATE_MODULE = ModuleEnum.OTHER;
    /**
     * 当前要生成的表
     */
    private static final String[] TO_GENERATE_TABLE_NAME = {"role_info"};

    public static void main(String[] args) {

        FastAutoGenerator
                .create("jdbc:mysql://172.16.11.15:3306" + TO_GENERATE_MODULE.getModulePath() + "?useSSL=false&serverTimezone=GMT%2B8&useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf-8","root","123456")
                .globalConfig(builder ->
                        builder
                                .outputDir(System.getProperty("user.dir") + TO_GENERATE_MODULE.getModuleService() +  "/src/main/java") //输出到哪个目录
                                .author("generator")
                                .enableSwagger()
                                .dateType(DateType.TIME_PACK))
                .packageConfig(builder ->
                                builder
                                        .parent(TO_GENERATE_MODULE.modulePackage) // 父包名
                                      //  .moduleName("sys")   // 父包模块名
                                        .entity("pojo.entity")
                                        .service("service")
                                        .serviceImpl("service.impl")
                                        .mapper("mapper")
                                        .xml("mapper.xml")
                                        .controller("controller")
                ).templateConfig(builder ->
                        builder
                                .entity("/templates/entity.java")
                                .service("/templates/service.java")
                                .serviceImpl("/templates/serviceImpl.java")
                                .mapper("/templates/mapper.java")
                                .xml("/templates/mapper.xml")
                                .controller("/templates/controller.java")
                ).injectionConfig(builder ->
                                builder
                                        .beforeOutputFile((tableInfo, objectMap) -> {
                                            out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
                                        })
                                        .customFile(new CustomFile.Builder().fileName("DTO.java").filePath(System.getProperty("user.dir") + TO_GENERATE_MODULE.getModuleService() + "/src/main/java").enableFileOverride().templatePath("templates/dto.java.ftl").packageName(TO_GENERATE_MODULE.modulePackage + "/pojo/dto").build())
                                        .customFile(new CustomFile.Builder().fileName("VO.java").filePath(System.getProperty("user.dir") + TO_GENERATE_MODULE.getModuleService() + "/src/main/java").enableFileOverride().templatePath("templates/vo.java.ftl").packageName(TO_GENERATE_MODULE.modulePackage + "/pojo/vo").build())
                                        .customFile(new CustomFile.Builder().fileName("Query.java").filePath(System.getProperty("user.dir") + TO_GENERATE_MODULE.getModuleService() + "/src/main/java").enableFileOverride().templatePath("templates/paramQuery.java.ftl").packageName(TO_GENERATE_MODULE.modulePackage + "/pojo/query").build())
                                		.customFile(new CustomFile.Builder().fileName("Convert.java").filePath(System.getProperty("user.dir") + TO_GENERATE_MODULE.getModuleService() + "/src/main/java").templatePath("templates/convert.java.ftl").packageName(TO_GENERATE_MODULE.modulePackage + "/component/convert").build())
                                
                ).strategyConfig(builder ->
                        // 策略配置
                        builder
                                .enableCapitalMode()  // 开启大写命名
                                .addInclude(TO_GENERATE_TABLE_NAME)   // 需要加载的表
                ).strategyConfig(builder ->
                                builder
                                        .entityBuilder()
                                        .enableFileOverride()  // 覆盖已生成文件
                                        .enableChainModel()
                                        .enableLombok()
                                        .enableTableFieldAnnotation()
                                        .versionPropertyName("version")  // 乐观锁字段  生效要把乐观锁拦截器注入
                                        .logicDeletePropertyName("deleted")
                                        .addTableFills(new Column("create_time", FieldFill.INSERT))
                                        .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
                                        .idType(IdType.ASSIGN_ID)   // 主键的ID类型
                ).strategyConfig(builder ->
                                builder
                                        .controllerBuilder()
                                        .enableFileOverride()  //  覆盖已生成文件	默认值:false
                                        .enableHyphenStyle()
                                        .enableRestStyle()
                ).strategyConfig(builder ->
                        builder.
                                serviceBuilder()
                                .formatServiceFileName("%sService")
                                .formatServiceImplFileName("%sServiceImpl")
                ).templateEngine(new FreemarkerTemplateEngine())
                .execute();

    }


    @AllArgsConstructor
    enum ModuleEnum {

        /**
         * module
         */
     
        OTHER("/admin", "com.common.sys", "/common/common-tool"),

        ;

        @Getter
        private String modulePath;
        @Getter
        private String modulePackage;
        @Getter
        private String moduleService;
        
    }


}

dto.java.ftl

package ${package.Parent}.pojo.dto;

<#list table.importPackages as pkg>
</#list>
<#if springdoc>
import io.swagger.v3.oas.annotations.media.Schema;
<#elseif swagger>
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
</#if>
<#if entityLombokModel>
import lombok.Getter;
import lombok.Setter;
    <#if chainModel>
import lombok.experimental.Accessors;
    </#if>
</#if>

/**
 * <p>
 * ${table.comment!}
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
<#if entityLombokModel>
@Getter
@Setter
    <#if chainModel>
@Accessors(chain = true)
    </#if>
</#if>
<#if table.convert>
</#if>
<#if springdoc>
@Schema(name = "${entity}", description = "$!{table.comment}")
<#elseif swagger>
</#if>
<#if superEntityClass??>
public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}></#if> {
<#elseif activeRecord>
public class ${entity} extends Model<${entity}> {
<#elseif entitySerialVersionUID>
public class ${entity}DTO implements Serializable {
<#else>
public class ${entity}DTO {
</#if>
<#-- ----------  BEGIN 字段循环遍历  ---------->
<#list table.fields as field>

    <#if field.comment!?length gt 0>
        <#if springdoc>
    @Schema(description = "${field.comment}")
        <#elseif field.keyFlag || field.fill?? || field.versionField || field.logicDeleteField>
        <#elseif swagger>
    @ApiModelProperty("${field.comment}")
        <#else>
    /**
     * ${field.comment}
     */
        </#if>
    </#if>
        <#-- 普通字段 -->
    <#if field.keyFlag || field.fill?? || field.versionField || field.logicDeleteField>
    <#else>
    private ${field.propertyType} ${field.propertyName};
    </#if>
</#list>
<#------------  END 字段循环遍历  ---------->
<#if !entityLombokModel>
    <#list table.fields as field>
        <#if field.propertyType == "boolean">
            <#assign getprefix="is"/>
        <#else>
            <#assign getprefix="get"/>
        </#if>

    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}) {
    </#if>
        this.${field.propertyName} = ${field.propertyName};
        <#if chainModel>
        return this;
        </#if>
    }
    </#list>
</#if>
<#if entityColumnConstant>
    <#list table.fields as field>

    public static final String ${field.name?upper_case} = "${field.name}";
    </#list>
</#if>
<#if activeRecord>

    @Override
    public Serializable pkVal() {
    <#if keyPropertyName??>
        return this.${keyPropertyName};
    <#else>
        return null;
    </#if>
    }
</#if>
<#if !entityLombokModel>

    @Override
    public String toString() {
        return "${entity}{" +
    <#list table.fields as field>
        <#if field_index==0>
            "${field.propertyName} = " + ${field.propertyName} +
        <#else>
            ", ${field.propertyName} = " + ${field.propertyName} +
        </#if>
    </#list>
        "}";
    }
</#if>
}

vo.java.ftl

package ${package.Parent}.pojo.vo;

<#if springdoc>
import io.swagger.v3.oas.annotations.media.Schema;
<#elseif swagger>
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
</#if>
<#if entityLombokModel>
import lombok.Getter;
import lombok.Setter;
    <#if chainModel>
import lombok.experimental.Accessors;
    </#if>
</#if>

/**
 * <p>
 * ${table.comment!}
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
<#if entityLombokModel>
@Getter
@Setter
    <#if chainModel>
@Accessors(chain = true)
    </#if>
</#if>
<#if table.convert>
</#if>
<#if springdoc>
@Schema(name = "${entity}", description = "$!{table.comment}")
<#elseif swagger>
</#if>
<#if superEntityClass??>
public class ${entity}VO extends ${superEntityClass}<#if activeRecord><${entity}></#if> {
<#elseif activeRecord>
public class ${entity}VO extends Model<${entity}> {
<#elseif entitySerialVersionUID>
public class ${entity}VO implements Serializable {
<#else>
public class ${entity}VO {
</#if>
<#if entitySerialVersionUID>
</#if>
<#-- ----------  BEGIN 字段循环遍历  ---------->
<#list table.fields as field>
    <#if field.keyFlag>
        <#assign keyPropertyName="${field.propertyName}"/>
    </#if>

    <#if field.comment!?length gt 0>
        <#if springdoc>
    @Schema(description = "${field.comment}")
        <#elseif field.versionField || field.logicDeleteField>
        <#elseif swagger>
    @ApiModelProperty("${field.comment}")
        <#else>
    /**
     * ${field.comment}
     */
        </#if>
    </#if>
    <#if field.keyFlag>
        <#-- 主键 -->
        <#if field.keyIdentityFlag>
        <#elseif idType??>
    @TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
        <#elseif field.convert>
    @TableId("${field.annotationColumnName}")
        </#if>
    <#elseif field.fill??>
    </#if>
    <#if  field.versionField || field.logicDeleteField>
    <#else>
    private ${field.propertyType} ${field.propertyName};
    </#if>
</#list>
<#------------  END 字段循环遍历  ---------->
<#if !entityLombokModel>
    <#list table.fields as field>
        <#if field.propertyType == "boolean">
            <#assign getprefix="is"/>
        <#else>
            <#assign getprefix="get"/>
        </#if>

    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}) {
    </#if>
        this.${field.propertyName} = ${field.propertyName};
        <#if chainModel>
        return this;
        </#if>
    }
    </#list>
</#if>
<#if entityColumnConstant>
    <#list table.fields as field>

    public static final String ${field.name?upper_case} = "${field.name}";
    </#list>
</#if>
<#if activeRecord>

    @Override
    public Serializable pkVal() {
    <#if keyPropertyName??>
        return this.${keyPropertyName};
    <#else>
        return null;
    </#if>
    }
</#if>
<#if !entityLombokModel>

    @Override
    public String toString() {
        return "${entity}{" +
    <#list table.fields as field>
        <#if field_index==0>
            "${field.propertyName} = " + ${field.propertyName} +
        <#else>
            ", ${field.propertyName} = " + ${field.propertyName} +
        </#if>
    </#list>
        "}";
    }
</#if>
}

controller.java.ftl

package ${package.Controller};

import org.springframework.web.bind.annotation.*;
<#if restControllerStyle>
import org.springframework.web.bind.annotation.RestController;
<#else>
import org.springframework.stereotype.Controller;
</#if>
<#if superControllerClassPackage??>
import ${superControllerClassPackage};
</#if>
<#if swagger>
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
</#if>
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import javax.validation.Valid;
import ${package.Parent}.aop.EnableLog;
import ${package.Parent}.pojo.query.${entity}Query;
import ${package.Parent}.pojo.dto.${entity}DTO;
import ${package.Parent}.pojo.vo.${entity}VO;
import ${package.Parent}.base.Result;
import ${package.Service}.${table.serviceName};

import java.util.List;
/**
* <p>
* ${table.comment!} 前端控制器
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if swagger>
@Api(value = "${table.comment!} API", tags = "${table.comment!}")
</#if>
@RequiredArgsConstructor
<#if restControllerStyle>
@RestController
<#else>
@Controller
</#if>
@RequestMapping("<#if package.ModuleName?? && package.ModuleName != "">/${package.ModuleName}</#if>/<#if controllerMappingHyphenStyle>${controllerMappingHyphen}<#else>${table.entityPath}</#if>")
<#if kotlin>
class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}()</#if>
<#else>
    <#if superControllerClass??>
public class ${table.controllerName} extends ${superControllerClass} {
    <#else>
public class ${table.controllerName} {
    </#if>
    private final ${table.serviceName} service;

    <#if swagger>
    @ApiOperation("新增 ${table.comment!}")
    <#else>
    /**
    * 新增 ${table.comment!}
    *
    * @param dto 参数
    */
    </#if>
    @PostMapping
    @EnableLog("新增 ${table.comment!}")
    public Result<Void> add${entity}(@Valid @RequestBody ${entity}DTO dto) {
        service.add${entity}(dto);
        return Result.success();
    }

    <#if swagger>
    @ApiOperation("修改 ${table.comment!}")
    <#else>
    /**
    * 修改 ${table.comment!}
    *
    * @param id 主键
    * @param dto 参数
    */
    </#if>
    @PutMapping("/{id}")
    @EnableLog("修改 ${table.comment!}")
    public Result<Void> modify${entity}(@PathVariable Long id, @Valid @RequestBody ${entity}DTO dto) {
        dto.setId(id);
        service.modify${entity}(dto);
        return Result.success();
    }

    <#if swagger>
    @ApiOperation("删除 ${table.comment!}")
    <#else>
    /**
    * 删除 ${table.comment!}
    *
    * @param id 主键
    */
    </#if>
    @DeleteMapping("/{id}")
    @EnableLog("删除 ${table.comment!}")
    public Result<Void> delete${entity}(@PathVariable Long id) {
        service.delete${entity}(id);
        return Result.success();
    }


    <#if swagger>
    @ApiOperation("根据id获取 ${table.comment!} 详情")
    <#else>
    /**
    * 根据id获取 ${table.comment!} 详情
    *
    * @param id 主键
    */
    </#if>
    @GetMapping("/{id}")
    @EnableLog("根据id获取 ${table.comment!} 详情")
    public Result<${entity}VO> query${entity}ById(@PathVariable Long id) {
        ${entity}VO vo = service.query${entity}ById(id);
        return Result.success(vo);
    }


    <#if swagger>
    @ApiOperation("分页查询 ${table.comment!}")
    <#else>
    /**
    * 分页查询 ${table.comment!}
    *
    * @param dto 参数
    * @return
    */
    </#if>
    @PostMapping("/page")
    @EnableLog("分页查询 ${table.comment!} ")
    public Result<List<${entity}VO>> pagingList(@Valid @RequestBody ${entity}Query query) {
        Page<${entity}VO> page = service.pageList(query);
        return Result.from(page);
    }
}
</#if>

convert.java.ftl

package ${package.Parent}.component.convert;

import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import ${package.Entity}.${entity};
import ${package.Parent}.pojo.dto.${entity}DTO;
import ${package.Parent}.pojo.vo.${entity}VO;

import java.util.List;

/**
* <p>
* ${table.comment!} 转换类
* </p>
*
* @author ${author}
* @since ${date}
*/

@Mapper
public interface ${entity}Convert {

    ${entity}Convert INSTANCE = Mappers.getMapper(${entity}Convert.class);

    ${entity} toEntity(${entity}DTO dto);

    List<${entity}> toEntities(List<${entity}DTO> dtos);

    ${entity}VO toVO(${entity} entity);

    List<${entity}VO> toVOS(List<${entity}> entities);

}

entity.java.ftl

package ${package.Entity};

<#list table.importPackages as pkg>
import ${pkg};
</#list>
<#if springdoc>
import io.swagger.v3.oas.annotations.media.Schema;
<#elseif swagger>
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
</#if>
<#if entityLombokModel>
import lombok.Getter;
import lombok.Setter;
    <#if chainModel>
import lombok.experimental.Accessors;
    </#if>
</#if>

/**
 * <p>
 * ${table.comment!}
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
<#if entityLombokModel>
@Getter
@Setter
    <#if chainModel>
@Accessors(chain = true)
    </#if>
</#if>
<#if table.convert>
@TableName("${schemaName}${table.name}")
</#if>
<#if springdoc>
@Schema(name = "${entity}", description = "$!{table.comment}")
<#elseif swagger>
@ApiModel(value = "${entity}对象", description = "${table.comment!}")
</#if>
<#if superEntityClass??>
public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}></#if> {
<#elseif activeRecord>
public class ${entity} extends Model<${entity}> {
<#elseif entitySerialVersionUID>
public class ${entity} implements Serializable {
<#else>
public class ${entity} {
</#if>
<#if entitySerialVersionUID>

    private static final long serialVersionUID = 1L;
</#if>
<#-- ----------  BEGIN 字段循环遍历  ---------->
<#list table.fields as field>
    <#if field.keyFlag>
        <#assign keyPropertyName="${field.propertyName}"/>
    </#if>

    <#if field.comment!?length gt 0>
        <#if springdoc>
    @Schema(description = "${field.comment}")
        <#elseif swagger>
    @ApiModelProperty("${field.comment}")
        <#else>
    /**
     * ${field.comment}
     */
        </#if>
    </#if>
    <#if field.keyFlag>
        <#-- 主键 -->
        <#if field.keyIdentityFlag>
            <#if idType??>
    @TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
            <#else>
    @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
            </#if>
        <#elseif field.convert>
    @TableId("${field.annotationColumnName}")
        </#if>
        <#-- 普通字段 -->
    <#elseif field.fill??>
    <#-- -----   存在字段填充设置   ----->
        <#if field.convert>
    @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
        <#else>
    @TableField(fill = FieldFill.${field.fill})
        </#if>
    <#elseif field.convert>
    @TableField("${field.annotationColumnName}")
    </#if>
    <#-- 乐观锁注解 -->
    <#if field.versionField>
    @Version
    </#if>
    <#-- 逻辑删除注解 -->
    <#if field.logicDeleteField>
    @TableLogic
    </#if>
    private ${field.propertyType} ${field.propertyName};
</#list>
<#------------  END 字段循环遍历  ---------->
<#if !entityLombokModel>
    <#list table.fields as field>
        <#if field.propertyType == "boolean">
            <#assign getprefix="is"/>
        <#else>
            <#assign getprefix="get"/>
        </#if>

    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}) {
    </#if>
        this.${field.propertyName} = ${field.propertyName};
        <#if chainModel>
        return this;
        </#if>
    }
    </#list>
</#if>
<#if entityColumnConstant>
    <#list table.fields as field>

    public static final String ${field.name?upper_case} = "${field.name}";
    </#list>
</#if>
<#if activeRecord>

    @Override
    public Serializable pkVal() {
    <#if keyPropertyName??>
        return this.${keyPropertyName};
    <#else>
        return null;
    </#if>
    }
</#if>
<#if !entityLombokModel>

    @Override
    public String toString() {
        return "${entity}{" +
    <#list table.fields as field>
        <#if field_index==0>
            "${field.propertyName} = " + ${field.propertyName} +
        <#else>
            ", ${field.propertyName} = " + ${field.propertyName} +
        </#if>
    </#list>
        "}";
    }
</#if>
}

paramQuery.java.ftl

package ${package.Parent}.pojo.query;

<#if springdoc>
import io.swagger.v3.oas.annotations.media.Schema;
<#elseif swagger>
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
</#if>
<#if entityLombokModel>
import lombok.Getter;
import lombok.Setter;
    <#if chainModel>
import lombok.experimental.Accessors;
    </#if>
</#if>
import ${package.Parent}.base.BasePageQuery;

/**
* <p>
* ${table.comment!}
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if entityLombokModel>
@Getter
@Setter
<#if chainModel>
@Accessors(chain = true)
</#if>
</#if>
<#if springdoc>
@Schema(name = "${entity}", description = "$!{table.comment}")
<#elseif swagger>
@ApiModel(value = "${entity} 分页参数", description = "${table.comment!}")
</#if>
public class ${entity}Query extends BasePageQuery{



}

service.java.ftl

package ${package.Service};

import ${superServiceClassPackage};
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import ${package.Entity}.${entity};
import ${package.Parent}.pojo.query.${entity}Query;
import ${package.Parent}.pojo.dto.${entity}DTO;
import ${package.Parent}.pojo.vo.${entity}VO;


/**
* <p>
* ${table.comment!} 服务类
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if kotlin>
interface ${table.serviceName} : ${superServiceClass}<${entity}>
<#else>
public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {

    /**
    * 新增 ${table.comment!}
    *
    * @param dto 参数
    */
    void add${entity}(${entity}DTO dto);

    /**
    * 修改 ${table.comment!}
    *
    * @param dto 参数
    */
    void modify${entity}(${entity}DTO dto);

    /**
    * 删除 ${table.comment!}
    *
    * @param id 主键
    */
    void delete${entity}(Long id);

    /**
    * 根据id获取 ${table.comment!} 详情
    *
    * @param id 主键
    */
    ${entity}VO query${entity}ById(Long id);


    /**
    * 分页查询 ${table.comment!}
    *
    * @param dto 参数
    * @return
    */
    Page<${entity}VO> pageList(${entity}Query query);
}
</#if>

serviceImpl.java.ftl

package ${package.ServiceImpl};

import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
<#if table.serviceInterface>
import ${package.Service}.${table.serviceName};
</#if>
import ${superServiceImplClassPackage};
import org.springframework.stereotype.Service;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.transaction.annotation.Transactional;
import ${package.Parent}.pojo.query.${entity}Query;
import ${package.Parent}.pojo.dto.${entity}DTO;
import ${package.Parent}.pojo.vo.${entity}VO;
import ${package.Parent}.component.convert.${entity}Convert;

import java.util.List;


/**
* <p>
* ${table.comment!} 服务实现类
* </p>
*
* @author ${author}
* @since ${date}
*/
@Slf4j
@Service
@AllArgsConstructor
<#if kotlin>
open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>()<#if table.serviceInterface>, ${table.serviceName}</#if> {

}
<#else>
public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}><#if table.serviceInterface> implements ${table.serviceName}</#if> {

    private final ${entity}Convert INSTANCE = ${entity}Convert.INSTANCE;

    /**
    * 新增 ${table.comment!}
    *
    * @param dto 参数
    */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void add${entity}(${entity}DTO dto){
        ${entity} entity = INSTANCE.toEntity(dto);
        super.save(entity);
    }

    /**
    * 修改 ${table.comment!}
    *
    * @param dto 参数
    */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void modify${entity}(${entity}DTO dto){
        ${entity} entity = INSTANCE.toEntity(dto);
        super.updateById(entity);
    }

    /**
    * 删除 ${table.comment!}
    *
    * @param id 主键
    */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void delete${entity}(Long id){
        super.removeById(id);
    }

    /**
    * 根据id获取 ${table.comment!} 详情
    *
    * @param id 主键
    */
    @Override
    public ${entity}VO query${entity}ById(Long id){
        ${entity} entity = super.getById(id);
        return INSTANCE.toVO(entity);
    }


    /**
    * 分页查询 ${table.comment!}
    *
    * @param dto 参数
    * @return
    */
    @Override
    public Page<${entity}VO> pageList(${entity}Query query) {
        Page<${entity}> page = page(new Page<>(query.getPageNum(), query.getPageSize()),
        new LambdaQueryWrapper<${entity}>());
        List<${entity}VO> resultList = INSTANCE.toVOS(page.getRecords());
        return new Page<${entity}VO>().setTotal(page.getTotal()).setRecords(resultList);
    }
}
</#if>

生成效果

在这里插入图片描述

你知道的越多,你不知道的越多。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐