记录自己一个简单的curd项目配置的代码生成模板

项目的技术栈是:springboot,mybatis-plus,elasticsearch

如果连CURD都还没玩熟的兄弟,就不要玩模板了,自己好好码,代码可以生成,技术还是要自己慢慢学。CURD熟悉的兄弟也可以自己配,这个很简单,这本是一篇无意义的博文。哈哈哈

idea安装easyCode :

到setting/other setting里面配置easyCode

Type Mapper:

Global Config: 

int:

##初始化区域

##去掉表的t_前缀
$!tableInfo.setName($tool.getClassName($tableInfo.obj.name.replaceFirst("T","")))

##参考阿里巴巴开发手册,POJO 类中布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误
#foreach($column in $tableInfo.fullColumn)
#if($column.name.startsWith("is") && $column.type.equals("java.lang.Boolean"))
    $!column.setName($tool.firstLowerCase($column.name.substring(2)))
#end
#end

##实现动态排除列
#set($temp = $tool.newHashSet("id", "modify_userId","is_delete","modify_time","modify_user_name"))
#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)

其他几个没改

Template Setting:

entity:


#set($tableNameClass = $tool.firstLowerCase($!{tableInfo.name}))
#set($tableNameUnderLine = $tool.hump2Underline($tableNameClass))

##设置回调
$!callback.setFileName($tool.append($!{tableInfo.name}, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/entity"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}entity;
##使用全局变量实现默认包导入
$!autoImport
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.*;
import $!{tableInfo.savePackageName}.base.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

##使用宏定义实现类注释信息

@Document(indexName = "$tableNameUnderLine", indexStoreType = "niofs")
@Data
@TableName("$tableNameUnderLine")
@ApiModel("$!{tableInfo.comment}")
public class $!{tableInfo.name} extends BaseEntity implements Serializable {
    private static final long serialVersionUID = $!tool.serial();
#foreach($column in $tableInfo.fullColumn)
#if( "id" != ${column.name} && "modifyTime" != ${column.name} && "modifyUserId" != ${column.name} && "modifyUserName" != ${column.name}&& "isDelete" != ${column.name} )
    #set($type = $!{tool.getClsNameByFullName($column.type)})
    @ApiModelProperty("$!{column.comment}")
    #if(${type} == "String" || ${type} == "BigDecimal" || ${type} == "Double" || ${type} == "Float" )@Field(type = FieldType.Text, searchAnalyzer = "ik_max_word", analyzer = "ik_max_word", fielddata = true)#end#if($type== "Boolean" ||  $type == "Integer" || $type == "Long")@Field(type = FieldType.Integer)#end#if($type == "LocalDateTime" || $type == "Timestamp" || $type == "Date")@Field(type = FieldType.Date, format = DateFormat.date_hour_minute_second_millis)#end
    
    private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
    
#end
#end
}

service:

##定义初始变量
#set($tableName = $tool.append($tableInfo.name, "Service"))
#set($lowerClass =  $tool.firstLowerCase($tableInfo.name))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.bean.BaseQuery;
import $!{tableInfo.savePackageName}.bean.PageResp;
import $!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper;
import $!{tableInfo.savePackageName}.repository.$!{tableInfo.name}EsRepository;
import $!{tableInfo.savePackageName}.utils.AssertUtils;
import $!{tableInfo.savePackageName}.utils.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Set;
import java.util.Optional;


@Service
@RequiredArgsConstructor
public class $!{tableName} {
    private final $!{tableInfo.name}Mapper $!{lowerClass}Mapper;
    private final $!{tableInfo.name}EsRepository $!{lowerClass}EsRepository;
    
    //新增
    @Transactional(rollbackFor = Exception.class)
    public void add($!{tableInfo.name} $!{lowerClass}) {
       $!{lowerClass}.setId(null);
       $!{lowerClass}Mapper.insert($!{lowerClass});
       $!{lowerClass}EsRepository.save($!{lowerClass});
    }
    
    //修改
    @Transactional(rollbackFor = Exception.class)
    public void modify($!{tableInfo.name} $!{lowerClass}) {
        AssertUtils.notNull($!{lowerClass}.getId(), "id不能为空");
        final Optional<$!{tableInfo.name}> op =  $!{lowerClass}EsRepository.findById($!{lowerClass}.getId());
        AssertUtils.isTrue(op.isPresent(),"数据不存在");
        $!{lowerClass}Mapper.updateById($!{lowerClass});
         $!{lowerClass}EsRepository.save($!{lowerClass});
    }
    
    //删除
    public void delete(Set<Long> ids) {
        AssertUtils.notEmpty(ids,"请选择需要删除的数据");
        $!{lowerClass}Mapper.deleteBatchIds(ids);
        ids.forEach(s -> {
            $!{lowerClass}EsRepository.deleteById(s);
        });
    }

        //查询
        public PageResp queryPage(BaseQuery baseQuery, Pageable page) {
        //直接es查询
        final Pageable pageable = baseQuery.convertEsPage(page);
        Page<$!{tableInfo.name}> $!{lowerClass}Page = StringUtils.isNoneBlank(baseQuery.getKeyWord()) ?
                $!{lowerClass}EsRepository.search(baseQuery.genQueryBuilder($!{tableInfo.name}.class), pageable)
                : $!{lowerClass}EsRepository.findAll(pageable);
        return PageResp.R($!{lowerClass}Page);
//        PageHelper.startPage(page.getPageNumber(), page.getPageSize());
//        final List<$!{tableInfo.name}> $!{lowerClass}s = $!{lowerClass}Mapper.selectList(Wrappers.<$!{tableInfo.name}>query().orderByAsc("id"));
//        PageInfo pageInfo = new PageInfo($!{lowerClass}s);
//        return pageInfo;
    }

}
    
    
    

 controller:

##定义初始变量
#set($tableName = $tool.append($tableInfo.name, "Controller"))
#set($lowerClass =  $tool.firstLowerCase($tableInfo.name))

##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/controller"))
##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}controller;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import $!{tableInfo.savePackageName}.annotation.ApiIdempotent;
import $!{tableInfo.savePackageName}.bean.BaseQuery;
import $!{tableInfo.savePackageName}.bean.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Set;

/**
 * $!{tableInfo.comment}($!{tableInfo.name})表控制层
 * @author $!author
 * @since $!time.currTime()
 */
@RestController
@RequestMapping("/$!lowerClass")
@RequiredArgsConstructor
@Api(tags = "$!{tableInfo.name}Api接口")
public class $!{tableName} {
    
    private final $!{tableInfo.name}Service $!tool.firstLowerCase($tableInfo.name)Service;

    
    @PostMapping
    @ApiOperation("新增")
    @ApiIdempotent
    public R add(@RequestBody @Validated $!{tableInfo.name} $!lowerClass) {
        $!{lowerClass}Service.add($!lowerClass);
        return R.success();
    }

    @PutMapping
    @ApiOperation("修改")
    @ApiIdempotent
    public R modify(@RequestBody @Validated $!{tableInfo.name} $!lowerClass) {
        $!{lowerClass}Service.modify($!lowerClass);
        return R.success();
    }

    @GetMapping
    @ApiOperation("分页查询")
    public R query(BaseQuery query, Pageable page) {
        return R.success($!{lowerClass}Service.queryPage(query, page));
    }

    @DeleteMapping
    @ApiOperation("删除")
    public R delete(@RequestBody Set<Long> ids) {
        $!{lowerClass}Service.delete(ids);
        return R.success();
    }

}

 ES repository:

##定义初始变量
#set($tableName = $tool.append($tableInfo.name, "EsRepository"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/repository"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}repository;
import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import org.springframework.stereotype.Repository;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

@Repository
public interface $!{tableName} extends ElasticsearchRepository<$!{tableInfo.name},Long>{

}

Mapper:

##定义初始变量
#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

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}mapper;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

@Repository
public interface $!{tableName} extends BaseMapper<$!{tableInfo.name}>{

}