easycode 表配置_EasyCode插件使用及模板参考

EasyCode插件使用及模板参考

1、介绍安装

Easycode是idea的一个插件,可以直接对数据的表生成entity、controller、service、dao、mapper无需任何编码,简单而强大。

9e9defd32d0550e35a34134ab0fa6866.png

我这里的话是已经那装好了。

建议大家在安装一个插件,叫做Lombok。

Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。出现的神奇就是在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法。

2、在IDEA配置连接数据库

在这个之前,新建一个Springboot项目,这个应该是比较简单的。

建好SpringBoot项目之后,如下图所示,配置数据源,我这里是已经配置完成的。

393745188f81c5178fdc34ee58a3b566.png

3、开始生成代码

在这个里面找到你想生成的表,然后右键,就会出现如下所示的截面。这里点击后会选择生成的文件类型,以及生成文件的位置。

e89c60d39dd8617609883b4f43959723.png

如下图所示,这里是,我们的选择方式:

2595f4940efbfb4e40d6a1c412eb8125.png

注意:我们在模板中配置过,这里选择适合,Package选项是选择到倒数第二层的位置,下面模板会自动找到所在位置。

4、模板配置

我们在这里进行配置,模板配置语言是velocity语言,这里配置的是SPring+通用Mapper

fbfdee4eeae052b851a2ec3910cf6360.png

4.1entity层配置

##导入宏定义

$!define

##保存文件(宏定义)

#save("/entity", ".java")

##包路径(宏定义)

#setPackageSuffix("entity")

##自动导入包(全局变量)

$!autoImport

import tk.mybatis.mapper.annotation.NameStyle;

import tk.mybatis.mapper.code.Style;

import javax.persistence.Id;

import javax.persistence.Table;

import lombok.Data;

##表注释(宏定义)

#tableComment("表实体类")

@Data

@NameStyle(Style.normal)

@Table(name = "$!{tableInfo.name}")

public class $!{tableInfo.name}{

#foreach($column in $tableInfo.fullColumn)

#if(${column.comment})//${column.comment}#end

private $!{tool.getClsNameByFullName($column.type)} $!{column.name};

#end

}

注意:

$!define 这个我们不用关注,默认即可

save("/entity", ".java"),这里是定义了实体类的所在包名,后缀是.java

setPackageSuffix("entity") ,这里是包路径

tableComment("表实体类") 是一种注释

在配置界面有着详细的方法注释,可以看着注释进行更加详细的配置。

4.2dao层配置

##定义初始变量

#set($tableName = $tool.append($tableInfo.name, "Mapper"))

##设置回调

$!callback.setFileName($tool.append($tableName, ".java"))

$!callback.setSavePath($tool.append($tableInfo.savePath, "/dao"))

##拿到主键

#if(!$tableInfo.pkColumn.isEmpty())

#set($pk = $tableInfo.pkColumn.get(0))

#end

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

import tk.mybatis.mapper.common.Mapper;

import com.ctbt.entity.$!{tableInfo.name};

/**

* $!{tableInfo.comment}($!{tableInfo.name})表数据库访问层

*

* @author $!author

* @since $!time.currTime()

*/

public interface $!{tableName} extends Mapper{

}

注意:

1、这里我们注意前三行的配置,第一行是一个字符串连接操作得到,NameMapper,这种样子;设置文件名字,后缀是.java;设置保存路径

2、注意接下来是拿到主键,这个拿到的主键$pk不能直接用

3、接下来是配置注释信息,我们也可以使用#tableComment("表实体类")来代替这么多行内容

4.3Service层配置

##定义初始变量

#set($tableName = $tool.append($tableInfo.name, "Service"))

##设置回调

$!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}.dao.$!{tableInfo.name}Mapper;

import cn.hutool.core.collection.CollUtil;

import com.ctbt.enums.ExceptionEnum;

import com.ctbt.exception.CtbtException;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**

* $!{tableInfo.comment}($!{tableInfo.name})表服务接口

*

* @author $!author

* @since $!time.currTime()

*/

@Service

@Transactional

public class $!{tableName} {

@Autowired(required = false)

private $!{tableInfo.name}Mapper $!{tool.firstLowerCase($tableInfo.name)}Mapper;

/**

*根据参数查询数据,参数为空时,查询所有

* @param $!tool.firstLowerCase($!tableInfo.name)

* @return

*/

public List queryAll($!{tableInfo.name} $!tool.firstLowerCase($!tableInfo.name)) {

List select = $!{tool.firstLowerCase($tableInfo.name)}Mapper.select($!tool.firstLowerCase($!tableInfo.name));

if (CollUtil.isEmpty(select)) {

throw new CtbtException(ExceptionEnum.NOT_FOUND_OR_FOUND_ERROR);

}

return select;

}

/**

* 插入数据

* @param $!tool.firstLowerCase($!tableInfo.name)

*/

public void add($!{tableInfo.name} $!tool.firstLowerCase($!tableInfo.name)) {

if($!{tool.firstLowerCase($tableInfo.name)}Mapper.selectByPrimaryKey($!{tool.firstLowerCase($!tableInfo.name)}.getId())!=null){

throw new CtbtException(ExceptionEnum.DATA_ALREADY_EXISTS);

}

int insert = $!{tool.firstLowerCase($tableInfo.name)}Mapper.insert($!tool.firstLowerCase($!tableInfo.name));

if (insert != 1) {

throw new CtbtException(ExceptionEnum.INSERT_ERROR);

}

}

/**

* 更新数据

* @param $!tool.firstLowerCase($!tableInfo.name)

*/

public void update($!{tableInfo.name} $!tool.firstLowerCase($!tableInfo.name)) {

int i = $!{tool.firstLowerCase($tableInfo.name)}Mapper.updateByPrimaryKey($!tool.firstLowerCase($!tableInfo.name));

if (i != 1) {

throw new CtbtException(ExceptionEnum.UPDATE_ERROR);

}

}

#foreach($column in $tableInfo.pkColumn)

/**

* 根据主键删除数据

* @param $column.name

*/

public void delete($!{tool.getClsNameByFullName($column.type)} $column.name) {

int i = $!{tool.firstLowerCase($tableInfo.name)}Mapper.deleteByPrimaryKey($column.name);

if (i != 1) {

throw new CtbtException(ExceptionEnum.DELETE_ERROR);

}

}

#break

#end

}

注意:

注意前三行以及开头注释不再赘述

下面是CRUD操作,注意删除操作时候,这里是选择一个循环操作,因为这里拿到的主键,设定不是一个,而默认是多个,所以我们用循环拿主键。

4.4Controller层配置

##定义初始变量

#set($tableName = $tool.append($tableInfo.name, "Controller"))

##设置回调

$!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 org.springframework.beans.factory.annotation.Autowired;

import org.springframework.http.ResponseEntity;

import org.springframework.web.bind.annotation.*;

import java.util.List;

/**

* $!{tableInfo.comment}($!{tableInfo.name})表控制层

*

* @author $!author

* @since $!time.currTime()

*/

@CrossOrigin

@RestController

@RequestMapping("$!tool.firstLowerCase($tableInfo.name)")

public class $!{tableName} {

/**

* 服务对象

*/

@Autowired

private $!{tableInfo.name}Service $!tool.firstLowerCase($tableInfo.name)Service;

/**

* 根据属性查询 (当参数为空时候)查询所有

* @param $!tool.firstLowerCase($!tableInfo.name)

* @return

*/

@GetMapping("list")

public ResponseEntity> query(@RequestBody(required = false) $!tableInfo.name $!tool.firstLowerCase($!tableInfo.name)){

return ResponseEntity.ok($!{tool.firstLowerCase($!{tableInfo.name})}Service.queryAll($!tool.firstLowerCase($!tableInfo.name)));

}

/**

* 插入一条数据

* @param $!tool.firstLowerCase($!tableInfo.name)

* @return

*/

@PostMapping("add")

public ResponseEntity> add(@RequestBody $!{tableInfo.name} $!tool.firstLowerCase($tableInfo.name)){

$!{tool.firstLowerCase($tableInfo.name)}Service.add($!tool.firstLowerCase($tableInfo.name));

return ResponseEntity.ok($!{tool.firstLowerCase($!{tableInfo.name})}Service.queryAll(new $!{tableInfo.name}()));

}

/**

* 根据主键更新数据

* @param $!tool.firstLowerCase($!tableInfo.name)

* @return

*/

@PutMapping("update")

public ResponseEntity> update(@RequestBody $!{tableInfo.name} $!tool.firstLowerCase($tableInfo.name)){

$!{tool.firstLowerCase($tableInfo.name)}Service.update($!tool.firstLowerCase($tableInfo.name));

return ResponseEntity.ok($!{tool.firstLowerCase($!{tableInfo.name})}Service.queryAll(new $!{tableInfo.name}()));

}

#foreach($column in $tableInfo.pkColumn)

/**

* 根据主键删除

* @param $column.name

* @return

*/

@DeleteMapping("del/{$column.name}")

public ResponseEntity> delete(@PathVariable("$column.name") $!{tool.getClsNameByFullName($column.type)} $column.name){

$!{tool.firstLowerCase($tableInfo.name)}Service.delete($column.name);

return ResponseEntity.ok($!{tool.firstLowerCase($!{tableInfo.name})}Service.queryAll(new $!{tableInfo.name}()));

}

#break

#end

}

注意:此处配置和Service层差别不大。

总结

这里,我们的配置不再详细描述了,根据模板配置的页面可以很好的可以理解,这里提一下其中一个语法,这里给出一个对比

1、

$!{tool.firstLowerCase($tableInfo.name)}Service.delete($column.name); 正确写法

$!tool.firstLowerCase($tableInfo.name)Service.delete($column.name); 错误写法

这里第一行和第二行的差别是缺少了一个{},因此要格外注意这个点

2、

private $!{tool.getClsNameByFullName($column.type)} $!{column.name};

private $tool.getClsNameByFullName($column.type) $column.name;

这里看到第一行相对第二行缺少一个!,这里是没有影响的,个人对这个原因不是很清楚,也没有去查velocity的语法,各位懂这个的可以指出,多谢!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值