idea使用easyCode生成代码(根据mybatis-plus模板创建自己的模板)

 更新时间:2023年10月17日 10:46:19   作者:我老菜  
本文主要介绍了idea使用easyCode生成代码,easyCode代码生成器可以减少低价值搬砖,具有一定的参考价值,感兴趣的可以了解一下

前言

easyCode代码生成器,减少低价值搬砖。
声明下:自定义模板内有大量自定义类,所以可以借鉴,不能直接使用。

一、安装easyCode插件

setting下载插件,重启idea,点开dataBase连接上数据库。

针对有一定基础的程序员哈,小白的话,建议先老老实实手敲代码。

二、生成代码-使用默认模板

1: dataBase连接上数据库后,选中某个表,右键->EasyCode->Generate Code,出现下面这个弹出框:

Module:是哪个项目模块
Package:生成的代码放在哪个包下
Path:生成代码所在的路劲
红框:这个是我自定义的模板(后面会怎么弄),这里可以选择默认的模板,如:MybatisPlus ,Default
Template:勾选需要生成哪些文件

2:选择完成后,点击OK就可以了。

代码如下(示例):

三、生成代码-自定义模板

File->settings->Other Settings->EasyCode->Template
我是复制了MybatisPlus- Mixed,然后重名为:MybatisPlus-lt。在此基础上修改的模板内容

注意1:模板内使用#if()进行逻辑判断

我配置了字段自动插入,需要在字段属性上加额外的注解,所以这里用到了

#if($!{column.name} == ‘delFlag')
@TableLogic
@TableField(fill = FieldFill.INSERT)
#end

注意2:模板内获取对象的小写单词

因为在实现类里有实现方法,所以需要使用到bookMapper,但是如何获取到Book对象的小写单词是个问题:

##定义实体对象名(驼峰)
#set($entityName = $!tool.firstLowerCase($!tableInfo.name))

说明下:

实现类里期望结果生成这个代码:bookMapper.deleteBatchIds(idList);

错误的:
下面这句的生成结果是:bookMapper;
$!tool.firstLowerCase($!tableInfo.name))Mapper.deleteBatchIds(idList);

正确的:
##定义实体对象名
#set($entityName = $!tool.firstLowerCase($!tableInfo.name))
这样去使用:
$!{entityName}Mapper.deleteBatchIds(idList);

例子:

注意3:修改Mapping.xml文件的位置

将BookMapping.xml 放在/src/main/resources/mapper/book目录下

我的自定义模板,可借鉴,不可直接用

模板内使用到了较多的自定义类,所以大家可以借鉴下,全盘照搬肯定是不行的。
自定义异常:CheckException
自定义返回类:BaseResponse
自定义查询类:BaseQuery
自定义:Msg
分页插件:PageHelper
id生成器:IdWorker

1: entity.java.vm

##导入宏定义
$!{define.vm}

##保存文件(宏定义)
#save("/entity", ".java")

##包路径(宏定义)
#setPackageSuffix("entity")

##自动导入包(全局变量)
$!autoImport
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.tao.base.BaseQuery;
import lombok.Data;

import java.util.Date;

##表注释(宏定义)
#tableComment("表实体类")
@Data
public class $!{tableInfo.name} extends BaseQuery {
#foreach($column in $tableInfo.fullColumn)
#if(${column.comment})
    /**
     * ${column.comment}
     **/
#end
#if($!{column.name} == 'delFlag')
    @TableLogic
    @TableField(fill = FieldFill.INSERT)
#end
#if($!{column.name} == 'createTime')
    @TableField(fill = FieldFill.INSERT)
#end
#if($!{column.name} == 'updateTime')
    @TableField(fill = FieldFill.INSERT_UPDATE)
#end
    private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
    
#end
}

2: mapper.java.vm

##导入宏定义
$!{define.vm}

##设置表后缀(宏定义)
#setTableSuffix("Mapper")

##保存文件(宏定义)
#save("/dao", "Mapper.java")

##包路径(宏定义)
#setPackageSuffix("dao")

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> {

}

3: service.java.vm

##导入宏定义
$!{define.vm}


##设置表后缀(宏定义)
#setTableSuffix("Service")

##保存文件(宏定义)
#save("/service", "Service.java")

##包路径(宏定义)
#setPackageSuffix("service")

import com.baomidou.mybatisplus.extension.service.IService;
import $!{tableInfo.savePackageName}.entity.$!tableInfo.name;

##表注释(宏定义)
#tableComment("表服务接口")
public interface $!{tableName} extends IService<$!tableInfo.name> {

    /**
     * 根据ids删除多条数据
     **/
    void deleteByIds(String ids);
    
    
}

4: serviceImpl.java.vm

##导入宏定义
$!{define.vm}

##设置表后缀(宏定义)
#setTableSuffix("ServiceImpl")

##保存文件(宏定义)
#save("/service/impl", "ServiceImpl.java")

##包路径(宏定义)
#setPackageSuffix("service.impl")

##定义实体对象名
#set($entityName = $!tool.firstLowerCase($!tableInfo.name))

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import $!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Mapper;
import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

##表注释(宏定义)
#tableComment("表服务实现类")
@Service("$!tool.firstLowerCase($tableInfo.name)Service")
public class $!{tableName} extends ServiceImpl<$!{tableInfo.name}Mapper, $!{tableInfo.name}> implements $!{tableInfo.name}Service {


    @Resource
    private $!{tableInfo.name}Mapper ${entityName}Mapper;
    
    /**
     * 根据ids删除多条数据
     **/
    @Override
    public void deleteByIds(String ids) {
        String[] idsArr = ids.split(",");
        if (idsArr.length > 0) {
            List<Long> idList = Stream.of(idsArr).map(Long::valueOf).collect(Collectors.toList());
            $!{entityName}Mapper.deleteBatchIds(idList);
        }
    }
    
    
}

5: controller.java.vm

##导入宏定义
$!{define.vm}

##设置表后缀(宏定义)
#setTableSuffix("Controller")

##保存文件(宏定义)
#save("/controller", "Controller.java")

##包路径(宏定义)
#setPackageSuffix("controller")
##定义服务名
#set($serviceName = $!tool.append($!tool.firstLowerCase($!tableInfo.name), "Service"))
##定义实体对象名
#set($entityName = $!tool.firstLowerCase($!tableInfo.name))

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.tao.Enum.Msg;
import com.tao.base.BaseQuery;
import com.tao.base.BaseResponse;
import $!{tableInfo.savePackageName}.entity.$!tableInfo.name;
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import com.tao.exception.CheckException;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

##表注释(宏定义)
#tableComment("表控制层")
@RestController
@RequestMapping("$!tool.firstLowerCase($!tableInfo.name)")
public class $!{tableName} {
    /**
     * 服务对象
     */
    @Autowired
    private $!{tableInfo.name}Service $!{serviceName};

    /**
     * 列表查询不分页 查询全部
     **/
    @RequestMapping(value = "list", method = RequestMethod.POST)
    public BaseResponse list(@RequestBody $!tableInfo.name model) {
        //条件查询
        QueryWrapper<$!tableInfo.name> queryWrapper = new QueryWrapper();
        //动态sql
//        if(StringUtils.isNotBlank(model.getAuthor())){
//            queryWrapper.lambda().eq($!tableInfo.name::getAuthor,model.getAuthor());
//        }
        //排序
        queryWrapper.lambda().orderByDesc($!tableInfo.name::getCreateTime);
        //执行查询
        List<$!tableInfo.name> list = $!{serviceName}.list(queryWrapper);
        //封装查询结果
        return new BaseResponse(Msg.SUCCESS, list);
    }
    
    /**
     * 列表查询 分页
     * 只能查询自己的
     **/
    @RequestMapping(value = "listPage", method = RequestMethod.POST)
    public BaseResponse listPage(@RequestBody $!tableInfo.name model) {
        //没有传分页参数时,默认设置查询前10条数据
        if (null == model.getPageSize()) {
            PageHelper.startPage(BaseQuery.DEFAULT_PAGE, BaseQuery.DEFAULT_SIZE);
        } else {
            PageHelper.startPage(model.getCurrentPage(), model.getPageSize());
        }
        //条件查询
        QueryWrapper<$!tableInfo.name> queryWrapper = new QueryWrapper();
        //动态sql
        if (StringUtils.isNotBlank(model.getAuthor())) {
            queryWrapper.lambda().eq($!tableInfo.name::getAuthor, model.getAuthor());
        }
        //排序
        queryWrapper.lambda().orderByDesc($!tableInfo.name::getCreateTime);
        //执行查询
        List<$!tableInfo.name> list = $!{serviceName}.list(queryWrapper);
        PageInfo<$!tableInfo.name> pageInfo = new PageInfo<>(list);
        //封装查询结果
        return new BaseResponse(Msg.SUCCESS, pageInfo.getTotal(), pageInfo.getList());
    }
    
   /**
     * 保存
     **/
    @RequestMapping(value = "insert", method = RequestMethod.POST)
    public BaseResponse insert(@RequestBody $!tableInfo.name model) {
        //设置默认id
        if (model.getId() == null) {
            model.setId(IdWorker.getId());
        }
        $!{serviceName}.save(model);
        //封装查询结果
        return new BaseResponse(Msg.SUCCESS, model.getId());
    }

    /**
     * 根据id更新
     **/
    @RequestMapping(value = "updateById", method = RequestMethod.PUT)
    public BaseResponse updateById(@RequestBody $!tableInfo.name model) throws Exception {
        //字段检查
        if (null == (model.getId())) {
            throw new CheckException(Msg.CHECK_ATTRIBUTE_FAIL, "id不能为空");
        }

        $!{serviceName}.updateById(model);
        //封装查询结果
        return new BaseResponse(Msg.SUCCESS);
    }


    /**
     * 根据id查询
     **/
    @RequestMapping(value = "getById/{id}", method = RequestMethod.GET)
    public BaseResponse getById(@PathVariable("id") Long id) {
        $!tableInfo.name temp = $!{serviceName}.getById(id);
        //封装查询结果
        return new BaseResponse(Msg.SUCCESS, temp);
    }

    /**
     * 根据id更新
     **/
    @RequestMapping(value = "deleteById/{id}", method = RequestMethod.DELETE)
    public BaseResponse deleteById(@PathVariable("id") Long id) {
        $!{serviceName}.removeById(id);
        //封装查询结果
        return new BaseResponse(Msg.SUCCESS);
    }

    /**
     * 根据多个id删除
     **/
//    @RequestMapping(value = "deleteByIds/{ids}", method = RequestMethod.DELETE)
//    public BaseResponse deleteByIds(@PathVariable("ids") String ids) throws Exception {
    @RequestMapping(value = "deleteByIds", method = RequestMethod.DELETE)
    public BaseResponse deleteByIds(@Param("ids") String ids) throws Exception {
        //业务检查
        if (StringUtils.isEmpty(ids)) {
            throw new CheckException(Msg.CHECK_ATTRIBUTE_FAIL, "请传入正确的ids");
        }
        $!{serviceName}.deleteByIds(ids);
        //封装查询结果
        return new BaseResponse(Msg.SUCCESS);
    }
    
    
}

6: mapping.xml.vm

##引入mybatis支持
$!{mybatisSupport.vm}
##定义实体对象名
#set($entityName = $!tool.firstLowerCase($!tableInfo.name))

##设置保存名称与保存位置
$!callback.setFileName($tool.append($!{tableInfo.name}, "Mapping.xml"))
$!callback.setSavePath($tool.append($modulePath, $tool.append("/src/main/resources/mapper/",$entityName)))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#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="$!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Mapper">

    <resultMap type="$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}" id="$!{tableInfo.name}Map">
#foreach($column in $tableInfo.fullColumn)
        <result property="$!column.name" column="$!column.obj.name" jdbcType="$!column.ext.jdbcType"/>
#end
    </resultMap>

    <!-- 批量插入 -->
    <!-- 
    <insert id="insertBatch" keyProperty="$!pk.name" useGeneratedKeys="true">
        insert into $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end)
        values
        <foreach collection="entities" item="entity" separator=",">
        (#foreach($column in $tableInfo.otherColumn)#{entity.$!{column.name}}#if($velocityHasNext), #end#end)
        </foreach>
    </insert>
    -->

</mapper>

到此这篇关于idea使用easyCode生成代码(根据mybatis-plus模板创建自己的模板)的文章就介绍到这了,更多相关idea easyCode生成代码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springBoot项目打包idea的多种方法

    springBoot项目打包idea的多种方法

    这篇文章主要介绍了springBoot项目打包idea的多种方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • SpringBoot集成Jasypt敏感信息加密的操作方法

    SpringBoot集成Jasypt敏感信息加密的操作方法

    这篇文章主要介绍了SpringBoot集成Jasypt加密敏感信息,包括敏感信息加密的作用,项目集成Jasypt方式详解,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • SpringCloud Sleuth实现分布式请求链路跟踪流程详解

    SpringCloud Sleuth实现分布式请求链路跟踪流程详解

    这篇文章主要介绍了SpringCloud Sleuth实现分布式请求链路跟踪流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-11-11
  • Java定义泛型接口和类的方法实例分析

    Java定义泛型接口和类的方法实例分析

    这篇文章主要介绍了Java定义泛型接口和类的方法,结合实例形式分析了泛型相关概念、原理及泛型接口与类的定义实现方法,需要的朋友可以参考下
    2019-08-08
  • Java中getSuperclass()方法的使用与原理解读

    Java中getSuperclass()方法的使用与原理解读

    文章介绍了Java中的getSuperclass()方法,该方法用于获取一个类的直接父类,通过理解其使用方式、工作原理以及实际应用场景,可以更好地利用反射机制处理类的继承关系,实现动态类型检查、类加载以及序列化等功能
    2025-01-01
  • Spring Security实现HTTP认证

    Spring Security实现HTTP认证

    本文主要介绍了Spring Security实现HTTP认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2022-06-06
  • elasticsearch+logstash并使用java代码实现日志检索

    elasticsearch+logstash并使用java代码实现日志检索

    这篇文章主要介绍了elasticsearch+logstash并使用java代码实现日志检索,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • 利用5分钟快速搭建一个springboot项目的全过程

    利用5分钟快速搭建一个springboot项目的全过程

    Spring Boot的监控能够使开发者更好地掌控应用程序的运行状态,下面这篇文章主要给大家介绍了关于如何利用5分钟快速搭建一个springboot项目的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • SpringMVC中RequestParam注解的简单理解

    SpringMVC中RequestParam注解的简单理解

    @RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上,下面这篇文章主要给大家介绍了关于SpringMVC中RequestParam注解的简单理解,需要的朋友可以参考下
    2022-03-03
  • springboot2.0以上调度器配置线程池的实现

    springboot2.0以上调度器配置线程池的实现

    这篇文章主要介绍了springboot2.0以上调度器配置线程池的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12

最新评论