语法

  • ## 是模板的注释,不会生成
  • # 全局的一些设置
  • $ 使用库函数或者调用全局定义的内容

常用方法

  • 数据库表信息 ${tableInfo}

    • comment 表备注
    • name 表名
    • fullColumn 所有列
      • comment 列备注
      • name 列名称
      • type 列类型
    • pkColumn 主键列
    • otherColumn 其他列

常用功能

  • 循环
#foreach($column in $tableInfo.fullColumn)
#end
  • 判断,是否包含字符串
#if($!{tool.getClsNameByFullName($column.type).contains('Date')})
#end
  • 小写转换,把第一个字母转换为小写
$!tool.firstLowerCase($!tableInfo.name)

示例

controller 自定义函数比较多,需要按照需要重写,前端也是可以生成的,通用性很差,根据实际情况生成

entity

##导入宏定义
$!define ##保存文件(宏定义)
#save("/entity", ".java") ##包路径(宏定义)
#setPackageSuffix("entity") ##自动导入包(全局变量)
$!autoImport
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data; import com.baomidou.mybatisplus.annotation.IdType; ##表注释(宏定义)
#tableComment("表实体类")
@Data
@TableName
public class $!{tableInfo.name} implements Serializable { private static final long serialVersionUID = -1;
/**
* 自增 => @TableId(type = IdType.AUTO)
*/
#foreach($column in $tableInfo.pkColumn)
#if(${column.comment}) /*${column.comment}*/#end
@TableId
private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end
#foreach($column in $tableInfo.otherColumn)
#if(${column.comment}) /*${column.comment}*/#end private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end
}

mapper

##导入宏定义
$!define ##设置表后缀(宏定义)
#setTableSuffix("Mapper") ##保存文件(宏定义)
#save("/mapper", "Mapper.java") ##包路径(宏定义)
#setPackageSuffix("mapper") $!autoImport import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import $!{tableInfo.savePackageName}.entity.$!tableInfo.name; ##表注释(宏定义)
#tableComment("表数据库访问层")
@Mapper
public interface $!{tableName} extends BaseMapper<$!tableInfo.name> { }

service

##导入宏定义
$!define ##设置表后缀(宏定义)
#setTableSuffix("Service") ##保存文件(宏定义)
#save("/service", "Service.java") ##包路径(宏定义)
#setPackageSuffix("service") $!autoImport import com.baomidou.mybatisplus.extension.service.IService;
import $!{tableInfo.savePackageName}.entity.$!tableInfo.name; ##表注释(宏定义)
#tableComment("表服务接口")
public interface $!{tableName} extends IService<$!tableInfo.name> { }

serviceImpl

##导入宏定义
$!define ##设置表后缀(宏定义)
#setTableSuffix("ServiceImpl") ##保存文件(宏定义)
#save("/service/impl", "ServiceImpl.java") ##包路径(宏定义)
#setPackageSuffix("service.impl") $!autoImport import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import $!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper;
import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import org.springframework.stereotype.Service; ##表注释(宏定义)
#tableComment("表服务实现类")
@Service("$!tool.firstLowerCase($tableInfo.name)Service")
public class $!{tableName} extends ServiceImpl<$!{tableInfo.name}Mapper, $!{tableInfo.name}> implements $!{tableInfo.name}Service { }

controller

##导入宏定义
$!define ##设置表后缀(宏定义)
#setTableSuffix("Controller") ##保存文件(宏定义)
#save("/controller", "Controller.java") ##包路径(宏定义)
#setPackageSuffix("controller") ##定义服务名
#set($serviceName = $!tool.append($!tool.firstLowerCase($!tableInfo.name), "Service")) ##定义实体对象名
#set($entityName = $!tool.firstLowerCase($!tableInfo.name)) $!autoImport import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.test.common.core.utils.Res;
import com.test.common.core.utils.Result;
import org.springframework.web.bind.annotation.*;
import lombok.extern.slf4j.Slf4j;
import lombok.AllArgsConstructor;
import com.test.business.entity.CommonQuery;
import com.test.business.utils.AutoQueryGenerator; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import $!{tableInfo.savePackageName}.entity.$!tableInfo.name;
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service; ##表注释(宏定义)
#tableComment("表控制层")
@RestController
@RequestMapping("/$!tool.firstLowerCase($!tableInfo.name)")
@AllArgsConstructor
@Slf4j
@Api(tags = "${tableInfo.comment}(${tableInfo.name})APi")
public class $!{tableName} {
/**
* 服务对象
*/
private final $!{tableInfo.name}Service $!{serviceName}; /**
* 分页查询所有数据
*
* @param page 分页对象
* @param $!entityName 查询实体
* @return 所有数据
*/
@GetMapping("/page")
@ApiOperation(value = "分页查询${tableInfo.comment}")
public Result listPageAll(Page<$!tableInfo.name> page, $!tableInfo.name $!entityName) {
return Res.ok($!{serviceName}.page(page, new LambdaQueryWrapper<$!tableInfo.name>()));
} /**
* 高级查询数据
*
* @param page 分页对象
* @param $!entityName 查询实体
* @return 所有数据
*/
@GetMapping("/queryPage")
@ApiOperation(value = "高级分页查询${tableInfo.comment}")
public Result listPageAll(Page<$!tableInfo.name> page, $!tableInfo.name $!entityName, CommonQuery commonQuery) {
QueryWrapper<$!tableInfo.name> autoQueryWrapper = AutoQueryGenerator.initQueryWrapper($!entityName, commonQuery);
return Res.ok($!{serviceName}.page(page, autoQueryWrapper));
} /**
* 高级查询所有数据
*
* @param $!entityName 查询实体
* @return 所有数据
*/
@GetMapping("/list")
@ApiOperation(value = "高级查询全部${tableInfo.comment}")
public Result listAll($!tableInfo.name $!entityName, CommonQuery commonQuery) {
QueryWrapper<$!tableInfo.name> autoQueryWrapper = AutoQueryGenerator.initQueryWrapper($!entityName, commonQuery);
return Res.ok($!{serviceName}.list(autoQueryWrapper));
} /**
* 通过主键查询单条数据
*
* @param id 主键
* @return 单条数据
*/
@GetMapping("/{id}")
@ApiOperation(value = "获取单个${tableInfo.comment}")
public Result selectOne(@PathVariable("id") Long id) {
return Res.ok($!{serviceName}.getById(id));
} /**
* 新增数据
*
* @param $!entityName 实体对象
* @return 新增结果
*/
@PostMapping
@ApiOperation(value = "新增${tableInfo.comment}")
public Result insert(@RequestBody $!tableInfo.name $!entityName) {
return Res.ok($!{serviceName}.save($!entityName));
} /**
* 修改数据
*
* @param $!entityName 实体对象
* @return 修改结果
*/
@PutMapping
@ApiOperation(value = "修改${tableInfo.comment}")
public Result update(@RequestBody $!tableInfo.name $!entityName) {
return Res.ok($!{serviceName}.updateById($!entityName));
} /**
* 删除数据
*
* @param id 主键结合
* @return 删除结果
*/
@DeleteMapping("/{id}")
@ApiOperation(value = "删除${tableInfo.comment}")
public Result delete(@PathVariable("id") Long id) {
return Res.ok($!{serviceName}.removeById(id));
}
}

【easycode】使用说明 & 示例的更多相关文章

  1. 设置API:wx.openSetting,wx.getSetting使用说明(示例:地图授权与取消授权后的重新授权)

    这个API解决了过去一个长久以来无法解决的问题,如何让用户重复授权: 打开小程序的设置界面:就是主动调取授权 目前资料极少,但是已经可以让大家先看看了: 官方文档地址:https://mp.weixi ...

  2. MarkDown 使用说明示例

    一.标题 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 一级标题 这是 H2 这是 H3 一级和二级标题还有一种写法 就是下面加横杆,同时 超过2个的 = 和 - 都可以有效果. Thi ...

  3. ansible基础及使用示例

    1 介绍 Ansible 是一个系统自动化工具,用来做系统配管理,批量对远程主机执行操作指令. 2 实验环境 ip 角色 192.168.40.71 ansible管控端 192.168.40.72 ...

  4. Matlab2015入门学习02

    1. 续行符 ... 当物理的一行之内写不下时, 在 物理行的结尾加上三个小黑点 >>跟在运算符之后,可以不留space空格 >>跟在数字之后,若不留白space,出错; 留一 ...

  5. (转)如何进行Monkey Test

    如何进行Monkey Test   目录 一 简介 二 测试准备 三 基本命令格式 四 测试Log获取 五 Monkey命令参数介绍 六 保存monkey log以及手机log到sdcard(新增) ...

  6. monkey测试(转)

    一.Monkey测试简介Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动Trackball.按键等操作来对设备上的程序进行压力测试,检测程序多久的时 ...

  7. Android压力测试快速入门教程(图解)——Monkey工具

    文章目录: 一.Monkey简介 二.Monkey的基本用法 三.Monkey测试示例图解 四.Monkey命令参数介绍 五.Monkey log分析 一.Monkey简介 Monkey:Androi ...

  8. 如何进行Monkey Test

    如何进行Monkey Test   目录 一 简介 二 测试准备 三 基本命令格式 四 测试Log获取 五 Monkey命令参数介绍 六 保存monkey log以及手机log到sdcard(新增) ...

  9. adb Monkey用法

    以这条Monkey指令为例: #monkey -s --throttle -p com.android.cameraswitch -- 这条monkey指令是测试:在camera模块中产生1万次伪随机 ...

随机推荐

  1. 一文读懂SuperEdge拓扑算法

    前言 SuperEdge service group 利用 application-grid-wrapper 实现拓扑感知,完成了同一个 nodeunit 内服务的闭环访问 在深入分析 applica ...

  2. iNeuOS工业互联平台,生产过程业务联动控制

    1.概述 工业物联网也好.工业互联网也好或是其他生产系统,反向控制始终无法回避.搞工业最直接.最体现效果的两个方面是采集各种数据和生产过程业务控制,所谓大数据预测和分析,那是仁者见仁.智者见智,下一篇 ...

  3. 阿里最强 Python 自动化工具开源了!

    1. 前言 大家好,我是安果! 最近,阿里内部开源了一个 iOS 端由 Python 编写的自动化工具,即:tidevice 它是一款跨平台的自动化开源工具,不依赖 Xcode 就可以启动 WebDr ...

  4. Oauth2协议那些事

    1. 背景 首先,设想一种情境:你平常会使用一款照片存储App(以下照片服务指代),用来将自己喜欢的照片存放在上面以备随时查看.假如有一天,你想要打印其中的某张照片而且你找到了一款打印照片App(以下 ...

  5. C++并发与多线程学习笔记--async、future、packaged_task、promise

    async future packaged_task promise async std:async 是个函数,用来启动一个异步任务,启动起来一个异步任务之后,返回一个std::futre对象,启动一 ...

  6. python基础(五):列表的使用(上)

    什么是列表 列表是一系列元素,按特定顺序排列组成.列表总的元素之间没有任何关系,既可以时字符串,也可以是数字,还可以是布尔值. 由此可以看出,列表通常包含多个元素,因此再给列表命名的时候,最好使用复数 ...

  7. lms框架分布式事务使用简介

    lms框架的分布式事务解决方案采用的TCC事务模型.在开发过程中参考和借鉴了hmily.使用AOP的编程思想,在rpc通信过程中通过拦截器的方式对全局事务或是分支事务进行管理和协调. 本文通过lms. ...

  8. C#修改AD账号及密码

    在使用AD域环境搭建的账号系统修改密码的时候比较麻烦一般需要管理员在域环境去进行对用户的密码进行修改. 以下就是用来查询和修改AD域密码的方法. 1 /// <summary> 2 /// ...

  9. Netcore webapi action swagger response返回参数使用匿名类型

    问题:action中返回匿名对象时,swagger只能按强类型生成返回值描述 解决办法:使用roslyn在内存中动态执行代码,使用json.net反序列化匿名对象,向swagger返回动态匿名对象 效 ...

  10. .NET6 平台系列2 .NET Framework框架详解

    系列目录     [已更新最新开发文章,点击查看详细] 什么是 .NET Framework? .NET Framework 是 Windows 的托管执行环境,可为其运行的应用提供各种服务. 它包括 ...