zoukankan      html  css  js  c++  java
  • EasyCode插件使用及模板参考

    EasyCode插件使用及模板参考

    1、介绍安装

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

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

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

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

    2、在IDEA配置连接数据库

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

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

    3、开始生成代码

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

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

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

    4、模板配置

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

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

    注意:

    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<$!{tableInfo.name}> queryAll($!{tableInfo.name} $!tool.firstLowerCase($!tableInfo.name)) {
            List<$!{tableInfo.name}> 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<List<$!{tableInfo.name}>> 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<List<$!{tableInfo.name}>> 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<List<$!{tableInfo.name}>> 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<List<$!{tableInfo.name}>> 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的语法,各位懂这个的可以指出,多谢!

  • 相关阅读:
    upgrade和update的区别
    批处理文件的几种路径扩展
    CMD does not support UNC paths as current directories.的巧妙解决方案
    让批处理不回显错误信息
    python中那纠结的os.system()与空格处理
    jQuery Mobel 学习相关资料整理(一)
    c#获取某月的第一天和某月的最后一天
    Umbraco网站制作(七) 调用外部用户控件
    Umbraco网站制作(八) 实现伪静态
    Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。
  • 原文地址:https://www.cnblogs.com/jimlau/p/13686748.html
Copyright © 2011-2022 走看看