java 按照模版自动生成代码(controller,service,serviceimpl,dao ,xml,)

maven 工程需要的  

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.0.7.1</version>
</dependency>
<!-- velocity 模板引擎, 默认 -->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.0</version>
</dependency>

 

package com.example.springboottest1.generator;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.ConstVal;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class MyGenerator {
    public static void main(String[] args) {
        AutoGenerator autoGenerator = new AutoGenerator();
        // 设置数据库相关配置
        DataSourceConfig dataSourceConfig = getDataSourceConfig();
        autoGenerator.setDataSource(dataSourceConfig);
        // 设置全局配置
        GlobalConfig globalConfig = getGlobalConfig();
        autoGenerator.setGlobalConfig(globalConfig);
        // 数据库关键字冲突,自动处理
        // 跟包相关的配置项
        PackageConfig packageConfig = getPackageConfig();
        autoGenerator.setPackageInfo(packageConfig);
        // 策略项配置
        StrategyConfig strategyConfig = getStrategyConfig();
        autoGenerator.setStrategy(strategyConfig);
        // 模板配置
        TemplateConfig templateConfig = getTemplateConfig();
        autoGenerator.execute();
    }

    // 数据库相关配置
    private static DataSourceConfig getDataSourceConfig() {
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        // 数据库类型
        dataSourceConfig.setDbType(DbType.MYSQL);
        // schemaname [public]
        dataSourceConfig.setSchemaName("public");
        // 设置数据库字段类型转换类
        dataSourceConfig.setTypeConvert(new MySqlTypeConvert());
        // 驱动连接的URL
        dataSourceConfig.setUrl(
            "jdbc:mysql://localhost:3306/my_mysql_database?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC");
        // 驱动名称
        dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");
        // 数据库连接用户名
        dataSourceConfig.setUsername("root");
        // 密码
        dataSourceConfig.setPassword("123456");
        return dataSourceConfig;
    }

    // 全局配置
    private static GlobalConfig getGlobalConfig() {
        GlobalConfig globalConfig = new GlobalConfig();
        // 生成文件的输出目录 [默认为D://]
        globalConfig.setOutputDir("F:\\generators");
        // 是否覆盖已有文件 [false]
        globalConfig.setFileOverride(true);
        // 是否打开输出目录 [true]
        globalConfig.setOpen(true);
        // 是否在xml中添加二级缓存配置 [true]
        globalConfig.setEnableCache(true);
        // 设置作者(在生成的注解中显示) [默认为空]
        globalConfig.setAuthor("Serenity");
        // 开启kotlin模式 [false]
        globalConfig.setKotlin(false);
        // 开启ActiveRecord模式 [false]
        globalConfig.setActiveRecord(true);
        // 开启BaseResultMap [false]
        globalConfig.setBaseResultMap(true);
        // 开启baseColumnList [false]
        globalConfig.setBaseColumnList(true);
        // mapper命名格式
        globalConfig.setMapperName("%sMapper");
        // xml命名格式
        globalConfig.setXmlName("%sMapper");
        // service命名格式
        globalConfig.setServiceName("%sService");
        // serviceImpl命名格式
        globalConfig.setServiceImplName("%sServiceImpl");
        // controller命名格式
        globalConfig.setControllerName("%sController");
        // 主键ID类型
        globalConfig.setIdType(IdType.AUTO);
        // 时间类型
        globalConfig.setDateType(DateType.ONLY_DATE);
        return globalConfig;
    }

    // 跟包相关的配置项
    private static PackageConfig getPackageConfig() {
        PackageConfig packageConfig = new PackageConfig();
        // 父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名
        packageConfig.setParent("com.qizhi.itfin");
        // 父包模块名
        packageConfig.setModuleName("");
        // Entity包名
        packageConfig.setEntity("entity");
        // Service包名
        packageConfig.setService("service");
        // Service Impl包名
        packageConfig.setServiceImpl("service.impl");
        // mapper包名
        packageConfig.setMapper("dao");
        // mapper xml包名
        packageConfig.setXml("dao.xml");
        // controller包名
        packageConfig.setController("controller");
        return packageConfig;
    }

    // 策略配置项
    private static StrategyConfig getStrategyConfig() {
        StrategyConfig strategyConfig = new StrategyConfig();
        // 是否大写命名
        strategyConfig.setCapitalMode(false);
        // 数据库表映射到实体的命名策略 [NamingStrategy.nochange]
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        // 数据库表字段映射到实体的命名策略,未指定按照 naming 执行
        strategyConfig.setColumnNaming(NamingStrategy.nochange);
        // 表前缀
        strategyConfig.setTablePrefix(new String[] {});
        // 字段前缀
        strategyConfig.setFieldPrefix(new String[] {});
        // 自定义继承的Entity类全称,带包名
        // strategyConfig.setSuperEntityClass();
        // 自定义基础的Entity类,公共字段
        // strategyConfig.setSuperEntityColumns();
        // 自定义继承的Mapper类全称,带包名
        strategyConfig.setSuperMapperClass(ConstVal.SUPER_MAPPER_CLASS);
        // 自定义继承的Service类全称,带包名
        strategyConfig.setSuperServiceClass(ConstVal.SUPER_SERVICE_CLASS);
        // 自定义继承的ServiceImpl类全称,带包名
        strategyConfig.setSuperServiceImplClass(ConstVal.SUPER_SERVICE_IMPL_CLASS);
        // 自定义继承的Controller类全称,带包名
        // strategyConfig.setSuperControllerClass();
        // 需要包含的表名(与exclude二选一配置) [null]
//        strategyConfig.setInclude("my_user");
        // 需要排除的表名 [null]
        // strategyConfig.setExclude();
        // strategyConfig.setInclude("datasource_config");
        // 是否生成字段常量(默认 false)
        strategyConfig.setEntityColumnConstant(false);
        // 是否为构建者模式 (默认false) 构建者模式:set方法返回this
        strategyConfig.setEntityBuilderModel(false);
        // 是否为lombok模型(默认false0
        strategyConfig.setEntityLombokModel(true);
        // Boolean类型字段是否移除is前缀(默认 false)
        strategyConfig.setEntityBooleanColumnRemoveIsPrefix(false);
        // 设置Controller为RestController [false]
        strategyConfig.setRestControllerStyle(true);
        // mapping中驼峰转连字符 [false]
        strategyConfig.setControllerMappingHyphenStyle(false);
        // 是否生成实体时,生成字段注解
        strategyConfig.setEntityTableFieldAnnotationEnable(false);
        // 乐观锁属性名称
        // strategyConfig.setVersionFieldName();
        // 逻辑删除属性名称
        // strategyConfig.setLogicDeleteFieldName();
        // 表填充字段 [null]
        strategyConfig.setTableFillList(null);
        return strategyConfig;
    }

    // 设置生成模板,如果不设置,则使用mybatisplus默认的模板,默认模板在mybatisplus的resources/templates文件夹下面
    private static TemplateConfig getTemplateConfig() {
        TemplateConfig templateConfig = new TemplateConfig();
        templateConfig.setController("templates/controller.java");
        templateConfig.setService("templates/service.java");
        templateConfig.setServiceImpl("templates/serviceImpl.java");
        return templateConfig;
    }

}

在resources 建立templates文件夹 文件夹内是需要的模版

package ${package.Controller};


import com.qizhi.itfin.common.util.PageUtils;
import com.qizhi.itfin.common.util.R;
import com.qizhi.itfin.entity.${table.entityName};
import com.qizhi.itfin.service.${table.serviceName};

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.plugins.Page;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.validation.Valid;
import java.util.HashMap;
import java.util.Map;
/**
 * $!{table.comment} 前端控制器
 */
@Slf4j
@RestController
@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 ($serviceImplName=$table.serviceName.substring(0,1).toLowerCase()+$table.serviceName.substring(1))
#set ($entityName=$table.entityName.substring(0,1).toLowerCase()+$table.entityName.substring(1))
    @Autowired
    private ${table.serviceName} ${serviceImplName};

    /**
     * 分页显示$!{table.comment}
     *
     * @param currentPage 当前页
     * @param pageSize 每页大小
     * @param sortFields 排序字段
     * @param orderTypes asc/desc
     */
    @RequestMapping("/page")
    public R page(Integer currentPage, Integer pageSize, String sortField, String orderType,
                 ${table.entityName} ${entityName}) {
           Page<${table.entityName}> page = PageUtils.getPage(currentPage, pageSize, sortField, orderType);
        PageResult pageResult = odrProductFromService.page(page, ${entityName});
        return R.ok().put("page", pageResult);
    }

    /**
     * 新增${table.comment}
     */
    @RequestMapping("/save")
    public R save(${table.entityName} ${entityName}) {
        if(${serviceImplName}.save(${entityName})){
            return R.ok();
        }else {
            return R.error("添加失败!");
        }
    }

    /**
     * 删除${table.comment}
     */
    @RequestMapping("/delete")
    public R delete(Integer id) {
        if(${serviceImplName}.removeById(id)){
            return R.ok();
        }else {
            return R.error("删除失败!");
        }
    }

    /**
     * 修改${table.comment}
     */
    @RequestMapping("/update")
    public R update(${table.entityName} ${entityName}, BindingResult result) {
        if(${serviceImplName}.updateById(${entityName})){
            return R.ok();
        } else {
            return R.error("修改失败!");
        }
    }

    /**
     * 查询${table.comment}信息
     *
     * @param id id
     */
    @RequestMapping("/info")
    public R info(Integer id) {
        ${table.entityName} ${entityName} = service.getById(id);
        return R.ok().put("data", ${entityName});
    }
}

 
#end
package ${package.Entity};

#foreach($pkg in ${table.importPackages})
import ${pkg};
#end
#if(${entityLombokModel})

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
#end

/**
 * $!{table.comment}
 *
 * @author ${author}
 * @since ${date}
 */
#if(${entityLombokModel})
@Data
#if(${superEntityClass})
@EqualsAndHashCode(callSuper = true)
#else
@EqualsAndHashCode(callSuper = false)
#end
@Accessors(chain = true)
#end
#if(${table.convert})
@TableName("${table.name}")
#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

    private static final long serialVersionUID = 1L;

## ----------  BEGIN 字段循环遍历  ----------
#foreach($field in ${table.fields})
#if(${field.keyFlag})
#set($keyPropertyName=${field.propertyName})
#end
#if("$!field.comment" != "")
    /**
     * ${field.comment}
     */
#end
#if(${field.keyFlag})
## 主键
#if(${field.keyIdentityFlag})
    @TableId(value = "${field.name}", type = IdType.AUTO)
#elseif(!$null.isNull(${idType}) && "$!idType" != "")
    @TableId(value = "${field.name}", type = IdType.${idType})
#elseif(${field.convert})
    @TableId("${field.name}")
#end
## 普通字段
#elseif(${field.fill})
## -----   存在字段填充设置   -----
#if(${field.convert})
    @TableField(value = "${field.name}", fill = FieldFill.${field.fill})
#else
    @TableField(fill = FieldFill.${field.fill})
#end
#elseif(${field.convert})
    @TableField("${field.name}")
#end
## 乐观锁注解
#if(${versionFieldName}==${field.name})
    @Version
#end
## 逻辑删除注解
#if(${logicDeleteFieldName}==${field.name})
    @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(${entityBuilderModel})
    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(${entityBuilderModel})
        return this;
#end
    }
#end
#end

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

#end
#end
#if(${activeRecord})
    @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($!{velocityCount}==1)
        "${field.propertyName}=" + ${field.propertyName} +
#else
        ", ${field.propertyName}=" + ${field.propertyName} +
#end
#end
        "}";
    }
#end
}
package ${package.Entity}

#foreach($pkg in ${table.importPackages})
import ${pkg}
#end

/**
 * $!{table.comment}
 *
 * @author ${author}
 * @since ${date}
 */
#if(${table.convert})
@TableName("${table.name}")
#end
#if(${superEntityClass})
class ${entity} : ${superEntityClass}#if(${activeRecord})<${entity}>#end() {
#elseif(${activeRecord})
class ${entity} : Model<${entity}>() {
#else
class ${entity} : Serializable {
#end

## ----------  BEGIN 字段循环遍历  ----------
#foreach($field in ${table.fields})
#if(${field.keyFlag})
#set($keyPropertyName=${field.propertyName})
#end
#if("$!field.comment" != "")
    /**
     * ${field.comment}
     */
#end
#if(${field.keyFlag})
## 主键
#if(${field.keyIdentityFlag})
    @TableId(value = "${field.name}", type = IdType.AUTO)
#elseif(!$null.isNull(${idType}) && "$!idType" != "")
    @TableId(value = "${field.name}", type = IdType.${idType})
#elseif(${field.convert})
    @TableId("${field.name}")
#end
## 普通字段
#elseif(${field.fill})
## -----   存在字段填充设置   -----
#if(${field.convert})
    @TableField(value = "${field.name}", fill = FieldFill.${field.fill})
#else
    @TableField(fill = FieldFill.${field.fill})
#end
#elseif(${field.convert})
    @TableField("${field.name}")
#end
## 乐观锁注解
#if(${versionFieldName}==${field.name})
    @Version
#end
## 逻辑删除注解
#if(${logicDeleteFieldName}==${field.name})
    @TableLogic
#end
    #if(${field.propertyType}=="Integer")
    var ${field.propertyName}: Int? = null
    #else
    var ${field.propertyName}: ${field.propertyType}? = null
    #end
#end
## ----------  END 字段循环遍历  ----------


#if(${entityColumnConstant})
    companion object {
#foreach($field in ${table.fields})

        const val ${field.name.toUpperCase()} : String = "${field.name}"

#end
    }

#end
#if(${activeRecord})
    override fun pkVal(): Serializable? {
#if(${keyPropertyName})
        return ${keyPropertyName}
#else
        return null
#end
    }

#end
    override fun toString(): String {
        return "${entity}{" +
#foreach($field in ${table.fields})
#if($!{velocityCount}==1)
        "${field.propertyName}=" + ${field.propertyName} +
#else
        ", ${field.propertyName}=" + ${field.propertyName} +
#end
#end
        "}"
    }
}
#end
package ${package.Mapper};

import ${package.Entity}.${entity};
import ${superMapperClassPackage};

/**
 * $!{table.comment} Mapper 接口
 *
 * @author ${author}
 * @since ${date}
 */
#if(${kotlin})
interface ${table.mapperName} : ${superMapperClass}<${entity}>
#else
public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {

}
#end
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${package.Mapper}.${table.mapperName}">

#if(${enableCache})
    <!-- 开启二级缓存 -->
    <cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>

#end
#if(${baseResultMap})
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="${package.Entity}.${entity}">
#foreach($field in ${table.fields})
#if(${field.keyFlag})##生成主键排在第一位
        <id column="${field.name}" property="${field.propertyName}" />
#end
#end
#foreach($field in ${table.commonFields})##生成公共字段
    <result column="${field.name}" property="${field.propertyName}" />
#end
#foreach($field in ${table.fields})
#if(!${field.keyFlag})##生成普通字段
        <result column="${field.name}" property="${field.propertyName}" />
#end
#end
    </resultMap>

#end
#if(${baseColumnList})
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
#foreach($field in ${table.commonFields})
        ${field.name},
#end
        ${table.fieldNames}
    </sql>

#end
</mapper>

 

package ${package.Service};

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qizhi.itfin.common.util.page.PageResult;
import ${package.Entity}.${entity};

/**
 * $!{table.comment} 服务类
 */
#set ($entityName=$entity.substring(0,1).toLowerCase()+$entity.substring(1))
#if(${kotlin})
interface ${table.serviceName} : ${superServiceClass}<${entity}>
#else
public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {
   PageResult page(Page<${entity}> page, ${entity} ${entityName});
}
#end

 

package ${package.ServiceImpl};

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${package.Service}.${table.serviceName};

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qizhi.itfin.common.util.page.PageResult;
import com.qizhi.itfin.common.util.page.PageUtils;

/**
 * $!{table.comment} 服务实现类
 *
 * @author ${author}
 * @since ${date}
 */
@Service
#set ($entityName=$entity.substring(0,1).toLowerCase()+$entity.substring(1))
#set ($mapperName=$table.mapperName.substring(0,1).toLowerCase()+$table.mapperName.substring(1))
#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} {
   @Autowired
    private ${table.mapperName} ${mapperName};

    @Override
    public PageResult page(Page<${entity}> page, OdrProductFrom ${entityName}) {
        QueryWrapper<${entity}> queryWrapper = new QueryWrapper<>(${entityName});
        PageResult pageResult = PageUtils.getPageResult(${mapperName}.selectPage(page, queryWrapper));
        return pageResult;
    }
}
#end
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值