Mybatis-Plus 代码生成器,自定义模板Demo,快速搭建!!

这篇具有很好参考价值的文章主要介绍了Mybatis-Plus 代码生成器,自定义模板Demo,快速搭建!!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Mybatis-Plus 代码生成器,自定义模板Demo,快速搭建!!

前言

详细信息以及具体配置方法解析–》官方文档:https://baomidou.com/

1.所需maven :

velocity 和 freemarker 选择导入,velocity 对应vm的模板,freemarker 对应flt模板,自定义模板,需要将导入进的配置下的模板复制到自己项目的resource下
01:Mybatis-Plus 下的模板
Mybatis-Plus 代码生成器,自定义模板Demo,快速搭建!!
02:自己项目 resource 新建 templates
Mybatis-Plus 代码生成器,自定义模板Demo,快速搭建!!
03:maven:文章来源地址https://www.toymoban.com/news/detail-418548.html

    <dependencies>
        <!-- mybatis plus 代码生成器 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.1</version>
        </dependency>
        
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
        
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

    </dependencies>

2.代码生成配置

package cn.hb.ycmm.basic;

import com.baomidou.mybatisplus.annotation.FieldFill;
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.OutputFile;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;

import java.util.Collections;

public class MyBatisPlusGenerator {

    public static void main(String[] args) {

        String projectPath = System.getProperty("user.dir");
        System.out.println(projectPath);
        // 数据源配置
        DataSourceConfig.Builder dataSourceConfig = new DataSourceConfig
                .Builder(
                "jdbc:mysql://127.0.0.1:3306/hb_ycmm?useUnicode=true&serverTimezone=GMT&useSSL=false&characterEncoding=utf8",
                "root",
                "password")
                .dbQuery(new MySqlQuery())
                .typeConvert(new MySqlTypeConvert())
                .keyWordsHandler(new MySqlKeyWordsHandler());

        FastAutoGenerator.create(dataSourceConfig)
                .globalConfig(builder -> {
                    builder.author("Hua.bin") //设置作者
                            .commentDate("YYYY-MM-DD HH:mm:ss")//注释日期
                            .outputDir(projectPath + "/ycmm-service/ycmm-service-system/src/main/java"); //指定输出目录

                })
                .packageConfig(builder -> {
                    builder.parent("cn.hb.ycmm.system") // 设置父包名
                            .moduleName("") // 设置父包模块名
                            .entity("entity")
                            .service("service") // service包名
                            .serviceImpl("service.impl") // serviceImpl包名
                            .mapper("mapper") // mapper包名
                            .controller("controller") // Controller 包名	默认值:controller
                            .other("param") // 自定义文件包名	输出自定义文件时所用到的包名
                            .pathInfo(Collections.singletonMap(OutputFile.entity,projectPath + "/ycmm-pojo/ycmm-pojo-system/src/main/java"))
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, projectPath + "/ycmm-service/ycmm-service-system/src/main//resources/mappers")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
//
                    builder.addInclude("t_config") // 设置需要生成的表名 请输入表名,多个英文逗号分隔?所有输入 all:
                            .addTablePrefix("t_")// 设置过滤表前缀

                            // Entity 策略配置
                            .entityBuilder()
                            .enableLombok() // 开启lombok
                            .enableChainModel() // 链式
                            .enableRemoveIsPrefix() // 开启boolean类型字段移除is前缀
                            .enableTableFieldAnnotation() //开启生成实体时生成的字段注解
                            .versionColumnName("请输入数据库中的乐观锁字段") // 乐观锁数据库字段
                            .versionPropertyName("请输入字段中的乐观锁名称") // 乐观锁实体类名称
                            .logicDeleteColumnName("请输入数据库中的逻辑删除字段") // 逻辑删除数据库中字段名
                            .logicDeletePropertyName("请输入数据库中的实体名称") // 逻辑删除实体类中的字段名
                            .naming(NamingStrategy.underline_to_camel) // 表名 下划线 -》 驼峰命名
                            .columnNaming(NamingStrategy.underline_to_camel) // 字段名 下划线 -》 驼峰命名
                            .idType(IdType.ASSIGN_UUID) // 主键生成策略 雪花算法生成id
                            .formatFileName("%sEntity") // Entity 文件名称
                            .addTableFills(new Column("create_time", FieldFill.INSERT), new Column("update_time", FieldFill.INSERT_UPDATE))//生成时间自动填充属性
                            .controllerBuilder().enableRestStyle()//开启@RestController风格
                            .serviceBuilder().formatServiceFileName("%sService"); //去掉默认的I前缀
                })

                //使用Freemarker引擎模板,默认的是Velocity引擎模板
                .templateEngine(new VelocityTemplateEngine())
                //设置自定义模板路径
                .templateConfig(builder -> {
                    builder.entity("/templates/entity.java.vm")
                            .service("/templates/service.java.vm")
                            .serviceImpl("/templates/serviceImpl.java.vm")
                            .controller("/templates/controller.java.vm");
                })

                //注入配置————自定义模板
                .injectionConfig(builder -> builder
                        .beforeOutputFile((tableInfo, objectMap) -> {
                            System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
                        }) //输出文件之前消费者
                        .customMap(Collections.singletonMap("my_field", "自定义配置 Map 对象")) //自定义配置 Map 对象
                        .customFile(Collections.singletonMap("query.java", "/templates/query.java.vm")) //自定义配置模板文件
                        .build()//加入构建队列
                )

                .execute();

    }

}

3.自定义模板

3.1 公共基础类

import cn.hb.ycmm.common.utils.ObjectUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Optional;
import org.springframework.lang.Nullable;

@ApiModel(
    description = "返回信息"
)
public class R<T> implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(
        value = "状态码",
        required = true
    )
    private int code;
    @ApiModelProperty(
        value = "是否成功",
        required = true
    )
    private boolean success;
    @ApiModelProperty("承载数据")
    private T data;
    @ApiModelProperty(
        value = "返回消息",
        required = true
    )
    private String msg;

    private R(IResultCode resultCode) {
        this(resultCode, (T) null, resultCode.getMessage());
    }

    private R(IResultCode resultCode, String msg) {
        this(resultCode, (T) null, msg);
    }

    private R(IResultCode resultCode, T data) {
        this(resultCode, data, resultCode.getMessage());
    }

    private R(IResultCode resultCode, T data, String msg) {
        this(resultCode.getCode(), data, msg);
    }

    private R(int code, T data, String msg) {
        this.code = code;
        this.data = data;
        this.msg = msg;
        this.success = ResultCode.SUCCESS.code == code;
    }

    public static boolean isSuccess(@Nullable R<?> result) {
        return (Boolean)Optional.ofNullable(result).map((x) -> {
            return ObjectUtil.nullSafeEquals(ResultCode.SUCCESS.code, x.code);
        }).orElse(Boolean.FALSE);
    }

    public static boolean isNotSuccess(@Nullable R<?> result) {
        return !isSuccess(result);
    }

    public static <T> R<T> data(T data) {
        return data(data, "操作成功");
    }

    public static <T> R<T> data(T data, String msg) {
        return data(200, data, msg);
    }

    public static <T> R<T> data(int code, T data, String msg) {
        return new R(code, data, data == null ? "暂无承载数据" : msg);
    }

    public static <T> R<T> success(String msg) {
        return new R(ResultCode.SUCCESS, msg);
    }

    public static <T> R<T> success(IResultCode resultCode) {
        return new R(resultCode);
    }

    public static <T> R<T> success(IResultCode resultCode, String msg) {
        return new R(resultCode, msg);
    }

    public static <T> R<T> fail(String msg) {
        return new R(ResultCode.FAILURE, msg);
    }

    public static <T> R<T> fail(int code, String msg) {
        return new R(code, (Object)null, msg);
    }

    public static <T> R<T> fail(IResultCode resultCode) {
        return new R(resultCode);
    }

    public static <T> R<T> fail(IResultCode resultCode, String msg) {
        return new R(resultCode, msg);
    }

    public static <T> R<T> status(boolean flag) {
        return flag ? success("操作成功") : fail("操作失败");
    }

    public int getCode() {
        return this.code;
    }

    public boolean isSuccess() {
        return this.success;
    }

    public T getData() {
        return this.data;
    }

    public String getMsg() {
        return this.msg;
    }

    public void setCode(final int code) {
        this.code = code;
    }

    public void setSuccess(final boolean success) {
        this.success = success;
    }

    public void setData(final T data) {
        this.data = data;
    }

    public void setMsg(final String msg) {
        this.msg = msg;
    }

    public String toString() {
        return "R(code=" + this.getCode() + ", success=" + this.isSuccess() + ", data=" + this.getData() + ", msg=" + this.getMsg() + ")";
    }

    public R() {
    }
}
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.util.Objects;

/**
 * @author hua.bin
 * @version 1.0.0
 * @ClassName BaseQuery.java
 * @Description 公共查询
 * @createTime 2022-05-13
 */
@Data
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ApiModel
public class BaseQuery {

    @NotNull(message = "页码不能为空")
    @Min(1)
    @ApiModelProperty("页码")
    private Integer current;

    @NotNull(message = "分页size不能为空")
    @ApiModelProperty("分页size")
    private Integer size;


    public Integer getCurrent() {
        return Objects.isNull(current) ? 1 : Math.max(1, current);
    }

    public Integer getSize() {
        return Objects.nonNull(size) ? Math.min(100, Math.max(1, size)) : 10;
    }

}

3.2 自定义模板(vm)

3.21 controller模板
package ${package.Controller};


import org.springframework.beans.factory.annotation.Autowired;
import cn.hb.ycmm.common.api.R;
import io.swagger.annotations.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;

#if(${restControllerStyle})
import org.springframework.web.bind.annotation.RestController;
#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")
@Api(value = "${table.controllerName}",tags = "${table.controllerName}")
#if(${kotlin})
class ${table.controllerName}#if(${superControllerClass}) : ${superControllerClass}()#end

#else
#if(${superControllerClass})
public class ${table.controllerName} extends ${superControllerClass} {
#else
public class ${table.controllerName} {
#end

@Autowired
private ${table.serviceName} ${table.entityPath}Service;

@PostMapping("/save")
@ApiOperation("添加XXL")
@ApiImplicitParams({
        @ApiImplicitParam(value = "token", paramType = "header", name = "token", required = true)
})
public  R save(@RequestBody ${entity} ${table.entityPath}){
        return R.status( ${table.entityPath}Service.insert${entity}(${table.entityPath}));
        }

@PostMapping("/update")
@ApiOperation("修改XXL")
@ApiImplicitParams({
        @ApiImplicitParam(value = "token", paramType = "header", name = "token", required = true)
})
public  R update(@RequestBody ${entity} ${table.entityPath}){
        return R.status( ${table.entityPath}Service.update${entity}(${table.entityPath}));
        }

@PostMapping("/delete")
@ApiOperation("删除XXL")
@ApiImplicitParams({
        @ApiImplicitParam(value = "token", paramType = "header", name = "token", required = true)
})
public R delete(@PathVariable("id") Long id){
        return R.status(${table.entityPath}Service.delete${entity}(id));
        }

@GetMapping("/queryById")
@ApiOperation("查询XXL实体对象")
@ApiImplicitParams({
        @ApiImplicitParam(value = "token", paramType = "header", name = "token", required = true)
})
@ApiResponses(@ApiResponse(code = 200, message = "成功", response = ${entity}.class))
public R<${entity}> get(@PathVariable("id")Long id){
        return R.data(${table.entityPath}Service.queryById(id));
        }

@PostMapping("/pageList")
@ApiOperation("查询XXL列表")
@ApiImplicitParams({
        @ApiImplicitParam(value = "token", paramType = "header", name = "token", required = true)
})
@ApiResponses(@ApiResponse(code = 200, message = "成功", response = ${entity}.class))
public R<IPage<${entity}>> pageList(@RequestBody ${entity}QueryParam queryParam){
        return R.data(${table.entityPath}Service.pageList(queryParam));
        }


}

#end
3.22 service模板(vm)
package ${package.Service};

import cn.hb.ycmm.common.api.R;
import com.baomidou.mybatisplus.core.metadata.IPage;
import ${package.Entity}.${entity};
import ${superServiceClassPackage};

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

        Boolean insert${entity}(${entity} ${table.entityPath});

        Boolean update${entity}(${entity} ${table.entityPath});

        Boolean delete${entity}(Long id);

        ${entity} queryById(Long id);

        IPage<${entity}> pageList(${entity}QueryParam queryParam);


        }
#end

3.23 serviceImpl模板(vm)
package ${package.ServiceImpl};

import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${package.Service}.${table.serviceName};
import ${superServiceImplClassPackage};
import cn.hb.ycmm.common.api.R;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.web.bind.annotation.*;
import org.springframework.stereotype.Service;

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

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

        @Override
        public Boolean insert${entity}(${entity} ${table.entityPath}){
        return this.save(${table.entityPath});
        }

        @Override
        public Boolean update${entity}(${entity} ${table.entityPath}){
        return this.updateById(${table.entityPath});
        }

        @Override
        public Boolean delete${entity}(Long id){
        return this.removeById(id);
        }

        @Override
        public ${entity} queryById(Long id){
        return this.getById(id);
        }

        @Override
        public IPage<${entity}> pageList(${entity}QueryParam queryParam){
        Page<${entity}> page = this.page(new Page<>(queryParam.getCurrent(), queryParam.getSize()));
        return page;
        }

}
#end

3.24公共查询基础模板(vm):
package ${package.Entity};

import cn.hb.ycmm.common.api.BaseQuery;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.validation.annotation.Validated;

/**
 *
 * @author ${author}
 * @since ${date}
 */
@Data
@Builder
@Validated
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("查询XXL入参")
public class ${table.entityName}QueryParam extends BaseQuery{
}

到了这里,关于Mybatis-Plus 代码生成器,自定义模板Demo,快速搭建!!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【MyBatis-Plus】DML编程控制 代码生成器(文末赠书)

    【MyBatis-Plus】DML编程控制 代码生成器(文末赠书)

    查询相关的操作我们已经介绍完了,紧接着我们需要对另外三个,增删改进行内容的讲解。挨个来说明下,首先是新增(insert)中的内容。 1. id生成策略控制 前面我们在新增的时候留了一个问题,就是新增成功后,主键ID是一个很长串的内容,我们更想要的是按照数据库表字段

    2024年02月13日
    浏览(29)
  • 【重要】springboot实战(六)之mybatis-plus代码自动生成器

    【重要】springboot实战(六)之mybatis-plus代码自动生成器

    目录 环境: 步骤: 1.添加依赖 2.配置代码 3.运行 测试 1.测试生成的service 1.1、service用法 2.分页查询 2.1、分页插件配置  2.2、测试 3.源码 jdk:1.8 springboot版本:2.7.15 mybatis-plus版本:3.5.1以上 (本文章用的当前最新版本:3.5.3.2,代码适用于3.5.1版本以上的版本) 在测试类中创建

    2024年02月03日
    浏览(9)
  • Java:mybatis-plus-generator-ui 基于Mybatis-Plus的代码自助生成器

    Java:mybatis-plus-generator-ui 基于Mybatis-Plus的代码自助生成器

    引用官方文档上的简介: 提供交互式的Web UI用于生成兼容mybatis-plus框架的相关功能代码,包括Entity,Mapper,Mapper.xml,Service,Controller等 ,可以自定义模板以及各类输出参数,也可通过SQL查询语句直接生成代码。 文档 github: https://github.com/davidfantasy/mybatis-plus-generator-ui gitee: https://g

    2024年02月10日
    浏览(10)
  • MyBatis-Plus 可视化代码生成器来啦,让你的开发效率大大提速!!

    MyBatis-Plus 可视化代码生成器来啦,让你的开发效率大大提速!!

    在基于Mybatis的开发模式中,很多开发者还会选择Mybatis-Plus来辅助功能开发,以此提高开发的效率。虽然Mybatis也有代码生成的工具,但Mybatis-Plus由于在Mybatis基础上做了一些调整,因此,常规的生成工具生成的代码还有一些不太符合预期。而且对于多数据库的支持不是很好。

    2024年02月05日
    浏览(13)
  • 代码生成器-mybatis-plus-generator

    代码生成器-mybatis-plus-generator

    我们平时在开发的过程中,对于新建的一张表难免会有对其进行增删改查的操作,而且还要写Controller、service、Mapper、Mapper.xml、PO、VO等等。如果每次都要去写这些跟业务毫不相干但是却又耗时耗力的重复代码这不仅是让开发人员不能专注于业务逻辑甚至可能由于不注意导致字

    2023年04月25日
    浏览(8)
  • springboot的代码生成器mybatis-plus-generator-ui

    springboot的代码生成器mybatis-plus-generator-ui

    GeberatorUIServer 在springboot的test中运行 这段代码是一个用于生成 MyBatis-Plus 代码的工具类,进行解释: 这是一个名为 GeberatorUIServer 的类。 这是程序的入口方法,即 main 方法。 这段代码创建了一个 GeneratorConfig 对象,并使用链式调用的方式设置了一系列参数: jdbcUrl :数据库连

    2024年02月10日
    浏览(10)
  • mybatis-plus-generator-ui 可视化代码生成器!

    mybatis-plus-generator-ui 可视化代码生成器!

    它提供交互式的Web UI用于生成兼容mybatis-plus框架的相关功能代码,包括Entity,Mapper,Mapper.xml,Service,Controller等。 可以自定义模板以及各类输出参数,也可通过SQL查询语句直接生成代码。 git地址 :https://github.com/davidfantasy/mybatis-plus-generator-ui 1、引入依赖 2、新建程序入口,以main函

    2024年02月08日
    浏览(10)
  • 5.6 Mybatis代码生成器Mybatis Generator (MBG)实战详解

    5.6 Mybatis代码生成器Mybatis Generator (MBG)实战详解

    本文我们主要实战Mybatis官方的代码生成器:Mybatis Generator(MBG),掌握它以后,可以简化大部分手写代码,我们只需要写复杂逻辑代码! 通过前几篇,我们掌握了在SpringBoot下Mybatis的基本用法,操作步骤回顾一下: 创建与MySQL表对应的Java PO对象,字段一一对应; 创建Mapper接口,

    2024年02月05日
    浏览(8)
  • mybatis-generator代码生成器的使用与配置

    mybatis-generator代码生成器的使用与配置

    官网的MyBatis Generator使用介绍,请点击下面的链接: 链接 MyBatis Generator 生成的文件包含三类: (1)Model实体文件,一个数据库表对应生成一个 Model 实体; (2)Mapper接口文件,数据数操作方法都在此接口中定义; (3)Mapper XML配置文件 在pom.xml文件添加如下依赖: 代码如下

    2024年02月14日
    浏览(11)
  • SmartSoftHelp 自定义开源C#代码生成器

    SmartSoftHelp 自定义开源C#代码生成器

    ​​​​​​蓦然回首终结者SmartSoftHelp开发辅助工具MiniLite2.0迷你版 V3.5   自定义生成 dbhelper                    Model                   BLL                   DAL                   sqltxt                   UI  方便快捷,支持自编码,自编译,自己修改生成代码内容

    2024年02月03日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包