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名字
相关推荐
AI多Agent协作实战派1 小时前
AI多Agent协作系统实战(十七):凌晨4点,我的AI系统在“假装工作“——3个bug同时爆炸的5小时
java·前端·bug
gaolei_eit1 小时前
Java+Ai+vue
java·spring·maven
qq_2518364572 小时前
基于java Web 动漫视频网站毕业论文
java·开发语言·前端
LayZhangStrive2 小时前
JUC相关的函数、注解、变量杂记
java·面试·多线程·juc
未秃头的程序猿2 小时前
给公司做了个AI客服Agent,用的Spring AI 1.0,3天上线领导拍板了
java·后端·ai编程
曹牧2 小时前
Eclipse 批量文本替换
java·ide·eclipse
程序员清风2 小时前
OpenAI官方发布最新提示词技巧!
java·后端·面试
一只枫林2 小时前
MySQL内、外连接知识点汇总
java·前端·数据库
梅头脑2 小时前
写了3年CRUD,volatile和synchronized的区别还是答不清——直到我画出了这张三性两锁边界图
java
暮暮祈安2 小时前
Celery 新手入门指南
java·数据库·python·flask·httpx