项目的技术栈是: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}>{
}