到了这里过后,我们剧本的架子已经基本搭起来了。我们可以开始进行大规模的表演了。在开始表演之前,我们要在采购一个道具,这个道具就是代码生成。我们很多的领域模型、vo、dto、entity等实体以及我们的dao层、service层、controller层、甚至我们的前端代码都能使用代码生成器进行生成。这样会节约我们很多的时间,让我们专注于业务上,不必在从数据库或者其他实体中来回的进行ctrl+c,ctrl+v。
首先在我们的IDEA中安装easyCode的插件,但是安装之前有个小坑,因为需要用到IDEA的“DataBase”,所以社区版的不能用这玩意,在这里悄悄咪咪的告诉各位一款PJ神器,专注PJ100年的那种。反正我身边的朋友用了都说好,当然也不知道啥时候会被干掉。
JetBrains全家桶:https://shimo.im/docs/WY3hd8Jt8KHgvVty/read
EasyCode是基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml)。只要是与数据库相关的代码都可以通过自定义模板来生成。支持数据库类型与java类型映射关系配置。支持同时生成生成多张表的代码。每张表有独立的配置信息。完全的个性化定义,规则由你设置。
源码仓库:https://gitee.com/makejava/EasyCode
文档:https://gitee.com/makejava/EasyCode/wikis/pages
贡献者
easyCode插件的安装,请选择“数据海洋”
填写你的链接信息
记得第一次要注意驱动的问题,点击Driver后面的链接可以配置驱动。
配置完成点击一下Test Connection如果提示成功就可以点击ok,来进行下面的配置了
我们先来进行默认的生成测试,右键sys_role表,然后点击“EasyCode --> Generate Code”
这个时候提示我们没有tinyint的数据类型,我们点击Yes去配置一下
将mysql数据库的tinyint类型映射为java的Integer类型
这个时候我们在继续生成
看看生成的效果,红色的部分都是生成的代码
可以看到,生成的代码有很多缺陷,我们的lombok并没有用上,而且Mybatis-Plus也没有用到,加上我们的页面啊什么的也没有生成到。
那么让我们来定制一下生成的模版吧,在配置页面
搜索easy Code,选择Template Setting,配置我们的模版
这里我就不详细介绍easyCode里面的标签了,大家可以参照文档来进行配置:https://gitee.com/makejava/EasyCode/wikis/pages
标签的话参考Velocity模板引擎语法:https://www.cnblogs.com/yangzhinian/p/4885973.html
##初始化区域
##去掉表的t_前缀
#if($tableInfo.obj.name.startsWith("自定义前缀_"))
$!tableInfo.setName($tool.getClassName($tableInfo.obj.name.substring(4)))
#end
## 定义版本号
#set($version = "1.0.0")
## 标记删除字段
#set($delete = "is_deleted")
## 创建时间标识
#set($createTime = "create_time")
## 公共字段
#set($publicFelids = $tool.newHashSet(
"createTime",
"createUserId",
"modifyTime",
"modifyUserId",
"isDeleted",
"remark"
))
##实现动态排除列
#set($temp = $tool.newHashSet("testCreateTime", "otherColumn"))
#foreach($item in $temp)
#set($newList = $tool.newArrayList())
#foreach($column in $tableInfo.fullColumn)
#if($column.name!=$item)
##带有反回值的方法调用时使用$tool.call来消除返回值
$tool.call($newList.add($column))
#end
#end
##重新保存
$tableInfo.setFullColumn($newList)
#end
##对importList进行篡改
#set($temp = $tool.newHashSet())
#foreach($column in $tableInfo.fullColumn)
#if(!$column.type.startsWith("java.lang."))
##带有反回值的方法调用时使用$tool.call来消除返回值
$tool.call($temp.add($column.type))
#end
#end
##覆盖
#set($importList = $temp)
##(Velocity宏定义)
##定义设置表名后缀的宏定义,调用方式:#setTableSuffix("Test")
#macro(setTableSuffix $suffix)
#set($tableName = $!tool.append($tableInfo.name, $suffix))
#end
##定义设置包名后缀的宏定义,调用方式:#setPackageSuffix("Test")
#macro(setPackageSuffix $suffix)
#if($suffix!="")package #end#if($tableInfo.savePackageName!="")$!{tableInfo.savePackageName}.#{end}$!suffix;
#end
##定义直接保存路径与文件名简化的宏定义,调用方式:#save("/entity", ".java")
#macro(save $path $fileName)
$!callback.setSavePath($tool.append($tableInfo.savePath, $path))
$!callback.setFileName($tool.append($tableInfo.name, $fileName))
#end
##定义表注释的宏定义,调用方式:#tableComment("注释信息")
#macro(tableComment $desc)
/**
* $!{tableInfo.comment}($!{tableInfo.name})$desc
*
* @author $!author
* @data $!time.currTime()
*/
#end
##定义GET,SET方法的宏定义,调用方式:#getSetMethod($column)
#macro(getSetMethod $column)
public $!{tool.getClsNameByFullName($column.type)} get$!{tool.firstUpperCase($column.name)}() {
return $!{column.name};
}
public void set$!{tool.firstUpperCase($column.name)}($!{tool.getClsNameByFullName($column.type)} $!{column.name}) {
this.$!{column.name} = $!{column.name};
}
#end
##自动导入包(仅导入实体属性需要的包,通常用于实体类)
#foreach($import in $importList)
import $!import;
#end
##针对Mybatis 进行支持,主要用于生成xml文件
#foreach($column in $tableInfo.fullColumn)
##储存列类型
$tool.call($column.ext.put("sqlType", $tool.getField($column.obj.dataType, "typeName")))
#if($tool.newHashSet("java.lang.String").contains($column.type))
#set($jdbcType="VARCHAR")
#elseif($tool.newHashSet("java.lang.Boolean", "boolean").contains($column.type))
#set($jdbcType="BOOLEAN")
#elseif($tool.newHashSet("java.lang.Byte", "byte").contains($column.type))
#set($jdbcType="BYTE")
#elseif($tool.newHashSet("java.lang.Integer", "int", "java.lang.Short", "short").contains($column.type))
#set($jdbcType="INTEGER")
#elseif($tool.newHashSet("java.lang.Long", "long").contains($column.type))
#set($jdbcType="INTEGER")
#elseif($tool.newHashSet("java.lang.Float", "float", "java.lang.Double", "double").contains($column.type))
#set($jdbcType="NUMERIC")
#elseif($tool.newHashSet("java.util.Date", "java.sql.Timestamp", "java.time.Instant", "java.time.LocalDateTime", "java.time.OffsetDateTime", " java.time.ZonedDateTime").contains($column.type))
#set($jdbcType="TIMESTAMP")
#elseif($tool.newHashSet("java.sql.Date", "java.time.LocalDate").contains($column.type))
#set($jdbcType="TIMESTAMP")
#else
##其他类型
#set($jdbcType="OTHER")
#end
$tool.call($column.ext.put("jdbcType", $jdbcType))
#end
##定义宏,查询所有列
#macro(allSqlColumn)#foreach($column in $tableInfo.fullColumn)$column.obj.name#if($velocityHasNext), #end#end#end
##引入宏定义
$!init
$!define
##定义初始变量
#set($tableName=$tool.append($tableInfo.name,"Entity"))
##设置回调
$!callback.setFileName($tool.append($tableName,".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath,"/entity"))
##使用宏定义设置包后缀
#setPackageSuffix("entity")
##使用全局变量实现默认包导入
$!autoImport
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.hzw.code.common.constant.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
#tableComment("数据访问类")
@Getter
@Setter
@ToString(callSuper = true)
@EqualsAndHashCode
@TableName("$!{tableInfo.obj.name}")
public class $!{tableName} extends BaseEntity{
/**
* 序列号
*/
private static final long serialVersionUID = $!tool.serial();
#if(!$tableInfo.pkColumn.isEmpty())
#set($pk = $tableInfo.pkColumn.get(0))
/**
* $!{pk.comment}
*/
@TableId
@ApiModelProperty(name = "$!{pk.name}", value = "$!{pk.comment}")
private $!{tool.getClsNameByFullName($pk.type)} $!{pk.name};
#end
#foreach($column in $tableInfo.otherColumn)
#set($have = false)
#foreach($felid in $publicFelids)
#if($column.name==$felid)
#set($have = true)
#break
#end
#end
#if(!$have)
/**
* $!{column.comment}
*/
#if(${column.comment})@ApiModelProperty(name = "$!{column.name}", value = "${column.comment}") #end
private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end
#end
}
##引入宏定义
$!init
$!define
##引入mybatis支持
$!mybatisSupport
##设置保存名称与保存位置
$!callback.setFileName($tool.append($!{tableInfo.name}, "Mapper.xml"))
#set($tempIndex = $!tableInfo.savePackageName.lastIndexOf('.') + 1)
##set($mapppath=$tableInfo.savePackageName.substring($tempIndex))
$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mapper/"))
##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
#set($pk = $tableInfo.pkColumn.get(0))
#end
#foreach($column in $tableInfo.fullColumn)
#end
#allSqlColumn()
UPDATE $!tableInfo.obj.name
${delete} = 1,
#foreach($column in $tableInfo.fullColumn)
#if($column.obj.name.equals("index_help"))
$!column.obj.name = $!pk.obj.name,
#end
#end
WHERE $!pk.obj.name = #{$!pk.name, jdbcType=$!{pk.ext.jdbcType}}
##引入宏定义
$!init
$!define
##定义初始变量
#set($tableName=$tool.append($tableInfo.name,"Mapper"))
##设置回调
$!callback.setFileName($tool.append($tableName,".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath,"/mapper"))
##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
#set($pk=$tableInfo.pkColumn.get(0))
#end
##使用宏定义设置包后缀
#setPackageSuffix("mapper")
##使用全局变量实现默认包导入
$!autoImport
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import $!{tableInfo.savePackageName}.controller.args.$!{tableInfo.name}PageArgs;
import $!{tableInfo.savePackageName}.controller.args.$!{tableInfo.name}QueryArgs;
import $!{tableInfo.savePackageName}.dto.$!{tableInfo.name}Dto;
import $!{tableInfo.savePackageName}.dto.page.$!{tableInfo.name}PageDto;
import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name}Entity;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* $!{tableInfo.comment}($!{tableInfo.name})持久层
*
* @author $!author
* @date $!time.currTime()
*/
@Repository
public interface $!{tableName} extends BaseMapper<$!{tableInfo.name}Entity>{
/**
* 分页查询
*
* @param args ${@link $!{tableInfo.name}PageArgs}
* @param page ${@link Page}
* @return IPage<$!{tableInfo.name}Dto> ${@link IPage<$!{tableInfo.name}Dto>}
* @author code generation
* @date $!time.currTime()
*/
IPage<$!{tableInfo.name}PageDto> page(Page page, @Param("query") $!{tableInfo.name}PageArgs args);
/**
* 条件查询多条
*
* @param args ${@link $!{tableInfo.name}QueryArgs}
* @return List<$!{tableInfo.name}Dto> ${@link List<$!{tableInfo.name}Dto>}
* @author code generation
* @date $!time.currTime()
*/
List<$!{tableInfo.name}Dto> selectListByModel($!{tableInfo.name}QueryArgs args);
}
##引入宏定义
$!init
$!define
##定义初始变量
#set($tableName=$tool.append($tableInfo.name,"Service"))
##设置回调
$!callback.setFileName($tool.append($tableName,".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath,"/service"))
##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
#set($pk=$tableInfo.pkColumn.get(0))
#end
##使用宏定义设置包后缀
#setPackageSuffix("service")
##使用全局变量实现默认包导入
$!autoImport
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import $!{tableInfo.savePackageName}.controller.args.$!{tableInfo.name}Args;
import $!{tableInfo.savePackageName}.controller.args.$!{tableInfo.name}PageArgs;
import $!{tableInfo.savePackageName}.controller.args.$!{tableInfo.name}QueryArgs;
import $!{tableInfo.savePackageName}.dto.$!{tableInfo.name}Dto;
import $!{tableInfo.savePackageName}.dto.page.$!{tableInfo.name}PageDto;
import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name}Entity;
import java.util.List;
/**
* $!{tableInfo.comment}($!{tableInfo.name})业务层接口
*
* @author $!author
* @date $!time.currTime()
*/
public interface $!{tableName} extends IService<$!{tableInfo.name}Entity> {
/**
* 保存
*
* @param args ${@link $!{tableInfo.name}Args}
* @throws RuntimeException ${@link RuntimeException}
* @author code generation
* @date $!time.currTime()
*/
void save($!{tableInfo.name}Args args) throws RuntimeException;
/**
* 通过id更新
*
* @param args ${@link $!{tableInfo.name}Args}
* @throws RuntimeException ${@link RuntimeException}
* @author code generation
* @date $!time.currTime()
*/
void updateById($!{tableInfo.name}Args args) throws RuntimeException;
/**
* 分页查询
*
* @param args ${@link $!{tableInfo.name}PageArgs}
* @throws RuntimeException ${@link RuntimeException}
* @return IPage<$!{tableInfo.name}PageDto> ${@link IPage<$!{tableInfo.name}Dto>}
* @author code generation
* @date $!time.currTime()
*/
IPage<$!{tableInfo.name}PageDto> page($!{tableInfo.name}PageArgs args) throws RuntimeException;
/**
* 条件查询多条
*
* @param args ${@link $!{tableInfo.name}QueryArgs}
* @throws RuntimeException ${@link RuntimeException}
* @return List<$!{tableInfo.name}Dto> ${@link List<$!{tableInfo.name}Dto>}
* @author code generation
* @date $!time.currTime()
*/
List<$!{tableInfo.name}Dto> selectListByModel($!{tableInfo.name}QueryArgs args) throws RuntimeException;
/**
* 通过id查询详情
*
* @param id ${@link String}
* @throws RuntimeException ${@link RuntimeException}
* @return $!{tableInfo.name}Dto ${@link $!{tableInfo.name}Dto}
* @author code generation
* @date $!time.currTime()
*/
$!{tableInfo.name}Dto getById(String id) throws RuntimeException;
}
##引入宏定义
$!init
$!define
##定义初始变量
#set($tableName=$tool.append($tableInfo.name,"ServiceImpl"))
##设置回调
$!callback.setFileName($tool.append($tableName,".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath,"/service/impl"))
##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
#set($pk=$tableInfo.pkColumn.get(0))
#end
##使用宏定义设置包后缀
#setPackageSuffix("service.impl")
##使用全局变量实现默认包导入
$!autoImport
import $!{tableInfo.savePackageName}.controller.args.$!{tableInfo.name}Args;
import $!{tableInfo.savePackageName}.controller.args.$!{tableInfo.name}PageArgs;
import $!{tableInfo.savePackageName}.controller.args.$!{tableInfo.name}QueryArgs;
import $!{tableInfo.savePackageName}.dto.$!{tableInfo.name}Dto;
import $!{tableInfo.savePackageName}.dto.page.$!{tableInfo.name}PageDto;
import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name}Entity;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import $!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper;
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import com.hzw.code.common.utils.ActionException;
import com.hzw.code.common.utils.ResultCodeEnum;
import lombok.extern.slf4j.Slf4j;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.beans.BeanUtils;
import java.util.List;
import org.springframework.transaction.annotation.Transactional;
/**
* $!{tableInfo.comment}($!{tableInfo.name})业务层实现
*
* @author $!author
* @date $!time.currTime()
*/
@Slf4j
@Service
@RequiredArgsConstructor
@Transactional
public class $!{tableName} extends ServiceImpl<$!{tableInfo.name}Mapper, $!{tableInfo.name}Entity> implements $!{tableInfo.name}Service {
private final $!{tableInfo.name}Mapper mapper;
@Override
public void save($!{tableInfo.name}Args args) throws RuntimeException {
$!{tableInfo.name}Entity entity = new $!{tableInfo.name}Entity();
BeanUtils.copyProperties(args, entity);
boolean result = super.save(entity);
if (!result) {
throw new ActionException(ResultCodeEnum.DATABASE_INSERT_ERROR);
}
}
@Override
public void updateById($!{tableInfo.name}Args args) throws RuntimeException {
// 查询数据是否存在
this.getById(args.get$tool.firstUpperCase(${pk.name})());
// 更新数据
$!{tableInfo.name}Entity entity = new $!{tableInfo.name}Entity();
BeanUtils.copyProperties(args, entity);
boolean result = super.updateById(entity);
if (!result) {
throw new ActionException(ResultCodeEnum.DATABASE_UPDATE_ERROR);
}
}
@Override
public List<$!{tableInfo.name}Dto> selectListByModel($!{tableInfo.name}QueryArgs args) throws RuntimeException {
List<$!{tableInfo.name}Dto> list = mapper.selectListByModel(args);
if (list == null || list.isEmpty()) {
throw new ActionException(ResultCodeEnum.DATABASE_NODATA);
}
return list;
}
@Override
public IPage<$!{tableInfo.name}PageDto> page($!{tableInfo.name}PageArgs args) throws RuntimeException {
return mapper.page(args.getQueryPage(), args);
}
@Override
public $!{tableInfo.name}Dto getById(String id) throws RuntimeException {
$!{tableInfo.name}Entity byId = super.getById(id);
if (byId == null) {
throw new ActionException(ResultCodeEnum.DATABASE_NODATA);
}
$!{tableInfo.name}Dto dto = new $!{tableInfo.name}Dto();
BeanUtils.copyProperties(byId, dto);
return dto;
}
}
##引入宏定义
$!init
$!define
##定义初始变量
#set($tableName=$tool.append($tableInfo.name,"Controller"))
##设置回调
$!callback.setFileName($tool.append($tableName,".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath,"/controller"))
##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
#set($pk=$tableInfo.pkColumn.get(0))
#end
##使用宏定义设置包后缀
#setPackageSuffix("controller")
##使用全局变量实现默认包导入
$!autoImport
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hzw.code.common.constant.SuperController;
import com.hzw.code.common.constant.BaseConstant;
import com.hzw.code.common.utils.ActionException;
import com.hzw.code.common.utils.ActionResult;
import com.hzw.code.common.validation.group.Insert;
import com.hzw.code.common.validation.group.Update;
import lombok.RequiredArgsConstructor;
import $!{tableInfo.savePackageName}.controller.args.$!{tableInfo.name}Args;
import $!{tableInfo.savePackageName}.controller.args.$!{tableInfo.name}PageArgs;
import $!{tableInfo.savePackageName}.controller.args.$!{tableInfo.name}QueryArgs;
import $!{tableInfo.savePackageName}.dto.$!{tableInfo.name}Dto;
import $!{tableInfo.savePackageName}.dto.page.$!{tableInfo.name}PageDto;
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import java.util.List;
import org.springframework.web.bind.annotation.*;
## 获取主键
#if(!$tableInfo.pkColumn.isEmpty())
#set($pk = $tableInfo.pkColumn.get(0))
#end
/**
* $!{tableInfo.comment}($!{tableInfo.name})控制层
*
* @author $!author
* @date $!time.currTime()
*/
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor
@Api(tags = "$!{tableInfo.name}", value = "$!{tableInfo.name}Api", description = "$!{tableInfo.name}Api接口相关")
@RequestMapping(value = BaseConstant.URI_DEPLOY_PREFIX + "/$tool.firstLowerCase($!{tableInfo.name})s", produces = MediaType.APPLICATION_JSON_VALUE)
public class $!{tableName} extends SuperController{
private final $!{tableInfo.name}Service service;
@ApiOperation(value = "添加(${version})", notes = "添加$!{tableInfo.comment}")
@PreAuthorize("hasAuthority('ROLE_ADMIN')")
@PostMapping
public ActionResult insert(@RequestBody @Validated(Insert.class) $!{tableInfo.name}Args args) throws ActionException {
service.save(args);
return successMsg("添加成功");
}
@ApiOperation(value = "通过${pk.comment}修改(${version})", notes = "修改$!{tableInfo.comment}")
@PreAuthorize("hasAuthority('ROLE_ADMIN')")
@PutMapping
public ActionResult
##引入宏定义
$!init
$!define
##定义初始变量
#set($tableName=$tool.append($tableInfo.name,"Args"))
##设置回调
$!callback.setFileName($tool.append($tableName,".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath,"/controller/args"))
##使用宏定义设置包后缀
#setPackageSuffix("controller.args")
##使用全局变量实现默认包导入
$!autoImport
import com.hzw.code.common.validation.group.Update;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.Date;
#tableComment("Args")
@Getter
@Setter
@ToString
@EqualsAndHashCode
@ApiModel(value = "$!{tableInfo.comment}添加或修改Request", description = "$!{tableInfo.comment}添加或修改入参")
public class $!{tableName} implements Serializable {
private static final long serialVersionUID = $!tool.serial();
#if(!$tableInfo.pkColumn.isEmpty())
#set($pk = $tableInfo.pkColumn.get(0))
/**
* $!{pk.comment}
*/
@ApiModelProperty(name = "$!{pk.name}", value = "$!{pk.comment}")
@NotBlank(message = "$!{pk.comment}不能为空", groups = Update.class)
private $!{tool.getClsNameByFullName($pk.type)} $!{pk.name};
#end
#foreach($column in $tableInfo.otherColumn)
/**
* $!{column.name}
*/
#if(${column.comment})@ApiModelProperty(name = "$!{column.name}", value = "${column.comment}" #if($!{tool.getClsNameByFullName($column.type)} == 'Integer') , example = "1" #end) #end
private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end
}
##引入宏定义
$!init
$!define
##定义初始变量
#set($tableName=$tool.append($tableInfo.name,"PageArgs"))
##设置回调
$!callback.setFileName($tool.append($tableName,".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath,"/controller/args"))
##使用宏定义设置包后缀
#setPackageSuffix("controller.args")
##使用全局变量实现默认包导入
$!autoImport
import com.hzw.code.common.constant.SuperPageArgs;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
#tableComment("PageArgs")
@Getter
@Setter
@ToString
@ApiModel(value = "$!{tableInfo.comment}分页查询Request", description = "$!{tableInfo.comment}分页查询入参")
public class $!{tableName} extends SuperPageArgs {
private static final long serialVersionUID = $!tool.serial();
#foreach($column in $tableInfo.fullColumn)
/**
* $!{column.name}
*/
#if(${column.comment})@ApiModelProperty(name = "$!{column.name}", value = "${column.comment}" #if($!{tool.getClsNameByFullName($column.type)} == 'Integer') , example = "1" #end) #end
private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end
}
##引入宏定义
$!init
$!define
##定义初始变量
#set($tableName=$tool.append($tableInfo.name,"PageDto"))
##设置回调
$!callback.setFileName($tool.append($tableName,".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath,"/dto/page"))
##使用宏定义设置包后缀
#setPackageSuffix("dto.page")
##使用全局变量实现默认包导入
$!autoImport
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
import lombok.EqualsAndHashCode;
import java.util.Date;
#tableComment("Dto")
@Getter
@Setter
@ToString
@EqualsAndHashCode
@ApiModel(value = "$!{tableInfo.comment}分页查询Response", description = "$!{tableInfo.comment}分页查询响应")
public class $!{tableName} implements Serializable {
private static final long serialVersionUID = $!tool.serial();
#foreach($column in $tableInfo.fullColumn)
/**
* $!{column.name}
*/
#if(${column.comment})@ApiModelProperty(name = "$!{column.name}", value = "${column.comment}" #if($!{tool.getClsNameByFullName($column.type)} == 'Integer') , example = "1" #end) #end
private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end
}
##引入宏定义
$!init
$!define
##定义初始变量
#set($tableName=$tool.append($tableInfo.name,"QueryArgs"))
##设置回调
$!callback.setFileName($tool.append($tableName,".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath,"/controller/args"))
##使用宏定义设置包后缀
#setPackageSuffix("controller.args")
##使用全局变量实现默认包导入
$!autoImport
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
import java.util.Date;
#tableComment("Args")
@Getter
@Setter
@ToString
@ApiModel(value = "$!{tableInfo.comment}条件查询Request", description = "$!{tableInfo.comment}条件查询入参")
public class $!{tableName} implements Serializable {
private static final long serialVersionUID = $!tool.serial();
#foreach($column in $tableInfo.fullColumn)
/**
* $!{column.name}
*/
#if(${column.comment})@ApiModelProperty(name = "$!{column.name}", value = "${column.comment}" #if($!{tool.getClsNameByFullName($column.type)} == 'Integer') , example = "1" #end) #end
private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end
}
##引入宏定义
$!init
$!define
##定义初始变量
#set($tableName=$tool.append($tableInfo.name,"Dto"))
##设置回调
$!callback.setFileName($tool.append($tableName,".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath,"/dto"))
##使用宏定义设置包后缀
#setPackageSuffix("dto")
##使用全局变量实现默认包导入
$!autoImport
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
import lombok.EqualsAndHashCode;
#tableComment("查询响应类")
@Getter
@Setter
@ToString
@EqualsAndHashCode
@ApiModel(value = "$!{tableInfo.comment}查询Response", description = "$!{tableInfo.comment}查询响应")
public class $!{tableName} implements Serializable {
/**
* 序列号
*/
private static final long serialVersionUID = $!tool.serial();
#foreach($column in $tableInfo.fullColumn)
/**
* ${column.comment}
*/
#if(${column.comment})@ApiModelProperty(name = "$!{column.name}", value = "${column.comment}") #end
private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end
}
##新增,编辑,详情页面
##引入宏定义
$!init
$!define
##设置保存名称与保存位置
$!callback.setFileName("addEdit.vue")
#set($tempIndex = $!tableInfo.savePackageName.lastIndexOf('.') + 1)
##set($mapppath=$tableInfo.savePackageName.substring($tempIndex))
$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mapper/",
$tool.firstLowerCase($!{tableInfo.name}),"Manage/"))
##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
#set($pk = $tableInfo.pkColumn.get(0))
#end
#foreach($column in $tableInfo.otherColumn)
#end
##JS代码
##引入宏定义
$!init
$!define
##设置保存名称与保存位置
$!callback.setFileName($tool.firstLowerCase($tool.append($!{tableInfo.name}, "Manage.js")))
#set($tempIndex = $!tableInfo.savePackageName.lastIndexOf('.') + 1)
##set($mapppath=$tableInfo.savePackageName.substring($tempIndex))
$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mapper/",
$tool.firstLowerCase($!{tableInfo.name}),"Manage/"))
##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
#set($pk = $tableInfo.pkColumn.get(0))
#end
import request from '@/utils/request'
//接口前缀
const sys_prefix = '/sys'
//分页
export function get$!{tableInfo.name}Page(query) {
return request({
url: sys_prefix + '/$tool.firstLowerCase($!{tableInfo.name})s/page',
method: 'get',
params: query
})
}
//列表
export function get$!{tableInfo.name}List(data) {
return request({
url: sys_prefix + '/$tool.firstLowerCase($!{tableInfo.name})s/list',
method: 'get',
params: data
})
}
//详情
export function get$!{tableInfo.name}Detail(data) {
return request({
url: sys_prefix + '/$tool.firstLowerCase($!{tableInfo.name})s/' + data.${pk.name},
method: 'get',
data
})
}
//新增
export function create$!{tableInfo.name}(data) {
return request({
url: sys_prefix + '/$tool.firstLowerCase($!{tableInfo.name})s',
method: 'post',
data
})
}
//更新
export function update$!{tableInfo.name}(data) {
return request({
url: sys_prefix + '/$tool.firstLowerCase($!{tableInfo.name})s',
method: 'put',
data
})
}
//删除
export function $tool.append("delete",$!{tableInfo.name})(data) {
return request({
url: sys_prefix + '/$tool.firstLowerCase($!{tableInfo.name})s/' + data.${pk.name},
method: 'delete',
data
})
}
##列表页面
##引入宏定义
$!init
$!define
##设置保存名称与保存位置
$!callback.setFileName("index.vue")
#set($tempIndex = $!tableInfo.savePackageName.lastIndexOf('.') + 1)
##set($mapppath=$tableInfo.savePackageName.substring($tempIndex))
$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mapper/",
$tool.firstLowerCase($!{tableInfo.name}),"Manage/"))
##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
#set($pk = $tableInfo.pkColumn.get(0))
#end
查询
新增
#foreach($column in $tableInfo.otherColumn)
#if($column == $tableInfo.otherColumn.get(0))
{{ scope.row.$!{column.name} }}
#else
{{ scope.row.$!{column.name} }}
#end
#end
详情
编辑
删除
模版设置好了过后,就可以开始生成了。
可以选择多张表
右键生成
生成时,需要注意几点,一定要选择好对应的Package,不然会生成错地方。还有就是可以勾选一下禁止提示。不然生成很多的话会一直弹框提示。
项目结构
生成后
到这里,就差不多了,easyCode可以导入导出,但是都是导出到他的官网,给你生成一个token。所以这里就没有使用这种方式导出来,而是直接贴出了我们的模版。
好了,到这里就差不多了!接下来我们将使用token的方式来进行登录,并且自定义错误的返回提示。
----------------------------------------------------------
项目的源码地址:https://gitee.com/gzsjd/fast
----------------------------------------------------------