idea配置SpringBoot+MybatisPlus的Controller模板,一键生成Controller

本质是idea使用velocity生成代码

1、介绍一下

我用的MybatisX-Generator生成了entity和service等,但是他没有controller,还得自己创建好麻烦,于是写了模板。

我的格式(以t_user_info表为例):

  • com.xx.entity.UserInfoEntity
  • com.xx.service.UserInfoService

我想在com.xx.controller中输入UserInfoController,让他给我创建基本的接口,且自动引入service和entity

接口返回类型为R,代码放下面。

2、配置模板

打开idea中文件 - 设置 - 编辑器 - 文件和代码模板

在编辑区输入代码

java 复制代码
package ${PACKAGE_NAME};
#set($ch = "")
#set($first = true)
#set($EntityName = $NAME.replaceAll("Controller", ""))
#foreach($ch in $EntityName.toCharArray())
    #set($ch = $ch + "")
    #if($ch == $ch.toUpperCase())
        #if($first)
            #set($entityName = $ch.toLowerCase())
            #set($entity_name = $ch.toLowerCase())
            #set($first = false)
        #else
            #set($entityName = $entityName + $ch)
            #set($entity_name = $entity_name + "_" + $ch.toLowerCase())
        #end
    #else
        #set($entity_name = $entity_name + $ch)
        #set($entityName = $entityName + $ch)
    #end
#end
#set($PARENT_PACKAGE = "")
#set($lastDotIndex = $PACKAGE_NAME.lastIndexOf("."))
#if($lastDotIndex > 0)
    #set($PARENT_PACKAGE = $PACKAGE_NAME.substring(0, $lastDotIndex))
#else
    #set($PARENT_PACKAGE = $PACKAGE_NAME)
#end


import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import ${PARENT_PACKAGE}.service.${EntityName}Service;
import ${PARENT_PACKAGE}.entity.${EntityName}Entity;
import ${PARENT_PACKAGE}.util.R;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Date;


/**
 * @author ${USER}
 * @description 针对表【t_${entity_name}】的数据库操作Controller实现
 * @createDate ${TIME}
 */
@Slf4j
@RestController
@RequestMapping("/${entity_name}")
public class ${EntityName}Controller {

    @Resource
    private ${EntityName}Service ${entityName}Service;

    /**
     * 新增或更新
     */
    @PostMapping("/save")
    public R save(@RequestBody ${EntityName}Entity ${entityName}){
        log.info("${entityName}: {}", JSON.toJSONString(${entityName}));
        if (${entityName}.getId() == null) {
            boolean flag = ${entityName}Service.save(${entityName});
            return flag ? R.ok() : R.error("新增失败");
        } else {
            ${entityName}.setUpdateTime(new Date());
            boolean flag = ${entityName}Service.updateById(${entityName});
            return flag ? R.ok() : R.error("更新失败");
        }
    }

    /**
     * 删除
     */
    @DeleteMapping("/{id}")
    public R delete(@PathVariable Long id){
        if (id == null) {
            return R.error("删除失败");
        }
        boolean flag = ${entityName}Service.removeById(id);
        return flag ? R.ok() : R.error("删除失败");
    }

    /**
     * 查询
     */
    @GetMapping("/{id}")
    public R get(@PathVariable Long id){
        if (id == null) {
            return R.error("查询失败");
        }
        ${EntityName}Entity ${entityName} = ${entityName}Service.getById(id);
        return R.ok().data(${entityName});
    }

    /**
     * 分页查询
     */
    @PostMapping("/list")
    public R list(@RequestParam(name = "current", defaultValue = "1") int current,
                  @RequestParam(name = "size", defaultValue = "10") int size) {
        log.info("current: {}, size: {}", current, size);
        Page<${EntityName}Entity> page = new Page<>(current, size);
        ${entityName}Service.page(page);
        return R.ok().data(page);
    }

}

其中,我的R放在com.xx.util下,代码如下

java 复制代码
package com.xx.util;

import lombok.Data;
import lombok.experimental.Accessors;

import java.util.HashMap;
import java.util.Map;

@Data
@Accessors(chain = true)
public class R {

    private Integer code;

    private String message;

    private Object data;

    public R code(Integer code) {
        this.code = code;
        return this;
    }

    public R message(String message) {
        this.message = message;
        return this;
    }

    public R data(Map<String, Object> data) {
        this.data = data;
        return this;
    }

    public R data(Object data) {
        this.data = data;
        return this;
    }

    public R data(String key, Object value) {
        ((Map<String, Object>) this.data).put(key, value);
        return this;
    }

    private R() {
        this.data = new HashMap<>();
    }

    public static R error() {
        return new R().code(500).message("ERROR");
    }

    public static R error(int code) {
        return new R().code(code).message("ERROR");
    }

    public static R error(String message) {
        return new R().message(message);
    }

    public static R ok() {
        return new R().code(200).message("SUCCESS");
    }
}

3、使用

  • 在controller包下右键,新建 - Java类
  • 选择Controller,输入Controller名字
相关推荐
程柯梦想几秒前
Maven修改默认编码格式UTF-8
java·maven
涛ing1 分钟前
【5. C++ 变量作用域及其深入探讨】
java·linux·c语言·开发语言·c++·ubuntu·vim
字节全栈_mMD1 小时前
Flink Connector 写入 Iceberg 流程源码解析_confluent icebergsinkconnector
java·大数据·flink
小园子的小菜1 小时前
RocketMQ中的NameServer主要数据结构
java·中间件·rocketmq·java-rocketmq
武昌库里写JAVA1 小时前
redis原理之数据结构
spring boot·spring·毕业设计·layui·课程设计
平凡君2 小时前
缓存的今生今世
java·spring·缓存
纠结哥_Shrek2 小时前
Java 有很多常用的库
java·开发语言
爱是小小的癌3 小时前
Java-数据结构-优先级队列(堆)
java·前端·数据结构
天乐敲代码3 小时前
JAVASE入门十五脚-网络TCP,UDP,,Lambda
java
2501_903238654 小时前
自定义登录页面的Spring Security实践
java·后端·spring·个人开发