热门课程

免费试听

上课方式

开班时间

当前位置: 首页 -   文章 -   新闻动态 -   正文

开发神器EasyCode

知了堂姐
2024-07-09 11:12:24
0

前言

Easy Code介绍

对于java程序员来说,日常工作中就是crud的操作,每次都要搭建MVC三层,还是很繁琐,这里就出现了神器easycode的工具,可以快速生成代码,并且还可以自定义模板,这样来对开发人员来说就减少了很多事情,把更多的时间去用在业务上,大大提高了效率。下面就一步一步搭建easycode,并且使用。

1、打开IntelliJ IDEA 新建一个maven工程

2、选择工程存放目录

3、下载安装EasyCode插件

file->settings->plugins 搜索Easy Code

搜索到后点击Install 我这里安装过了 安装完成会让你重启IDEA。

如何判断是否安装成功 file->settings->Other settings 看是否有Easy Code这个选项

4、引入Easy Code模板 (可以根据个人情况定制 也可以使用默认的)

5、创建数据库,数据表

6、配置数据源(需要指定数据库名称,要生成数据表)

点击IDEA右侧的Datbase->点击上方的加号->选择Data Source.->Mysql

7、配置数据源

注意:连接方式需要采用mysql8的连接方式,不然可能连接失败jdbc:mysql://localhost:3306/table?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false

8、连接成功如图所示

9、引入springboot的相关pom.xml依赖


        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            1.3.2
        
         
            mysql
            mysql-connector-java
            5.1.38
        
     

需要用到mybatis的启动器,所以也一起引用

10、打开Easy Code插件 选要生成的entity,controller,service,serviceimpl,dao

右击表名->Easy Code->Generate Code

Module:当前项目模块

package:生成代码存放包的位置

Template:生成的模板

11、勾选All表示生成所有,勾选禁止提示,防止弹出很多个提示信息,点击OK

12、生成模板

entity.java代码:

##引入宏定义
$!define
$!init

##使用宏定义设置回调(保存位置与文件后缀)
#save("/entity", ".java")

##使用宏定义设置包后缀
#setPackageSuffix("entity")

##使用全局变量实现默认包导入
$!autoImport
import java.io.Serializable;
import lombok.Data;

##使用宏定义实现类注释信息
#tableComment("实体类")
@Data
public class $!{tableInfo.name} implements Serializable {
    private static final long serialVersionUID = $!tool.serial();
#foreach($column in $tableInfo.fullColumn)
    #if(${column.comment})/**
    * ${column.comment}
    */#end

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

controller接口:controller.java代码如下:

##定义初始变量
#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 lombok.extern.slf4j.Slf4j;
import com.github.pagehelper.PageInfo;
import $!{tableInfo.savePackageName}.response.PageResult;
import $!{tableInfo.savePackageName}.response.Result;
import $!{tableInfo.savePackageName}.response.StatusCode;
import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import org.springframework.web.bind.annotation.*;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;

/**
 * $!{tableInfo.comment}($!{tableInfo.name})控制层
 *
 * @author protagonist
 * @since $!time.currTime()
 */
@RestController
@Slf4j
@RequestMapping("/$!tool.firstLowerCase($tableInfo.name)")
public class $!{tableName} {
    /**
     * 服务对象
     */
    @Resource
    private $!{tableInfo.name}Service $!tool.firstLowerCase($tableInfo.name)ServiceImpl;

    /**
     * 通过主键查询单条数据
     *
     * @param $!pk.name 主键
     * @return 单条数据
     */
    @GetMapping(value = "/get/{$!pk.name}")
    public Result selectOne(@PathVariable("$!pk.name") $!pk.shortType $!pk.name) {
        $tableInfo.name result = $!{tool.firstLowerCase($tableInfo.name)}ServiceImpl.selectById(id);
        if(Objects.nonNull(result)){
            return new Result<>(true,StatusCode.OK,"查询成功",result);
        }
        return new Result<>(true,StatusCode.ERROR,"查询失败");
    }
    
    /**
     * 新增一条数据
     *
     * @param $!tool.firstLowerCase($tableInfo.name) 实体类
     * @return Result对象
     */
    @PostMapping(value = "/insert")
    public Result insert(@RequestBody $tableInfo.name $!tool.firstLowerCase($tableInfo.name)) {
        int result = $!{tool.firstLowerCase($tableInfo.name)}ServiceImpl.insert($!tool.firstLowerCase($tableInfo.name));
        if (result > 0) {
          return new Result<>(true,StatusCode.OK,"新增成功",result);
        }
        return new Result<>(true,StatusCode.ERROR,"新增失败"); 
    }

    /**
     * 修改一条数据
     *
     * @param $!tool.firstLowerCase($tableInfo.name) 实体类
     * @return Result对象
     */
    @PutMapping(value = "/update")
    public Result update(@RequestBody $tableInfo.name $!tool.firstLowerCase($tableInfo.name)) {
        $tableInfo.name result = $!{tool.firstLowerCase($tableInfo.name)}ServiceImpl.update($!tool.firstLowerCase($tableInfo.name));
        if (Objects.nonNull(result)) {
          return new Result<>(true,StatusCode.OK,"修改成功",result);
        }
        return new Result<>(true,StatusCode.ERROR,"修改失败");
    }

    /**
     * 删除一条数据
     *
     * @param $!pk.name 主键
     * @return Result对象
     */
    @DeleteMapping(value = "/delete/{$!pk.name}")
    public Result delete(@PathVariable("$!pk.name") $!pk.shortType $!pk.name) {
        int result = $!{tool.firstLowerCase($tableInfo.name)}ServiceImpl.deleteById($!pk.name);
        if (result > 0) {
          return new Result<>(true,StatusCode.OK,"删除成功",result);
        }
        return new Result<>(true,StatusCode.ERROR,"删除失败");
    }

    /**
     * 查询全部
     *
     * @return Result对象
     */
    @GetMapping(value = "/selectAll")
    public Result> selectAll() {
        List<$tableInfo.name> $!tool.firstLowerCase($tableInfo.name)s = $!{tool.firstLowerCase($tableInfo.name)}ServiceImpl.selectAll();
        if (CollectionUtils.isEmpty($!tool.firstLowerCase($tableInfo.name)s)) {
            return new Result<>(true,StatusCode.ERROR,"查询全部数据失败");       
        }
        return new Result<>(true,StatusCode.OK,"查询全部数据成功",$!tool.firstLowerCase($tableInfo.name)s);
        
    }

    /**
     * 分页查询
     *
     * @param current 当前页  第零页和第一页的数据是一样
     * @param size 每一页的数据条数
     * @return Result对象
     */
    @GetMapping(value = "/selectPage/{current}/{size}")
    public Result selectPage(@PathVariable("current") Integer current,@PathVariable("size") Integer size) {
        PageInfo<$tableInfo.name> page = $!{tool.firstLowerCase($tableInfo.name)}ServiceImpl.selectPage(current, size);
        if (Objects.nonNull(page)) {
            return new Result<>(true,StatusCode.OK,"分页条件查询成功",new PageResult<>(page.getTotal(),page.getList()));
        }
        return new Result<>(true,StatusCode.ERROR,"分页查询数据失败");
    }
    
}

service接口:service.java 代码如下:

##定义初始变量
#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 java.util.List;
import com.github.pagehelper.PageInfo;

/**
 * $!{tableInfo.comment}($!{tableInfo.name})表服务接口
 *
 * @author protagonist
 * @since $!time.currTime()
 */
public interface $!{tableName} {

    /**
     * 通过ID查询单条数据
     *
     * @param $!pk.name 主键
     * @return 实例对象
     */
    $!{tableInfo.name} selectById($!pk.shortType $!pk.name);

    /**
     * 分页查询
     *
     * @param current 当前页
     * @param size 每一页数据的条数
     * @return 对象列表
     */
    PageInfo<$!{tableInfo.name}> selectPage(int current, int size);

    /**
     * 查询全部
     *
     * @return 对象列表
     */
    List<$!{tableInfo.name}> selectAll();
    
    /**
     * 通过实体作为筛选条件查询
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 对象列表
     */
    List<$!{tableInfo.name}> selectList($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * 新增数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 影响行数
     */
    int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
    
    /**
     * 批量新增
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name})s 实例对象的集合
     * @return 影响行数
     */
    int batchInsert(List<$!{tableInfo.name}> $!tool.firstLowerCase($!{tableInfo.name})s);
    
    /**
     * 修改数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 修改
     */
    $!{tableInfo.name} update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * 通过主键删除数据
     *
     * @param $!pk.name 主键
     * @return 影响行数
     */
    int deleteById($!pk.shortType $!pk.name);
    
    /**
     * 查询总数据数
     *
     * @return 数据总数
     */
    int count();
}

serviceImpl 实现类:serviceImpl .java代码如下:

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

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

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

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Dao;
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

import javax.annotation.Resource;
import java.util.List;


/**
 * $!{tableInfo.comment}($!{tableInfo.name}表)服务实现类
 *
 * @author protagonist
 * @since $!time.currTime()
 */
@Service("$!tool.firstLowerCase($!{tableInfo.name})ServiceImpl")
public class $!{tableName} implements $!{tableInfo.name}Service {
    @Resource
    private $!{tableInfo.name}Dao $!tool.firstLowerCase($!{tableInfo.name})Dao;

    /**
     * 通过ID查询单条数据
     *
     * @param $!pk.name 主键
     * @return 实例对象
     */
    @Override
    public $!{tableInfo.name} selectById($!pk.shortType $!pk.name) {
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.selectById($!pk.name);
    }

    /**
     * 分页查询
     *
     * @param current 当前页
     * @param size 每一页的条数
     * @return 对象列表
     */
    @Override
    public PageInfo<$!{tableInfo.name}> selectPage(int current, int size) {
        PageHelper.startPage(current,size);
        List<$!{tableInfo.name}> dataList = $!{tool.firstLowerCase($!{tableInfo.name})}Dao.selectAll();
        return new PageInfo<>(dataList);
    }

    /**
     * 查询所有
     *
     * @return 实例对象的集合
     */
     @Override
     public List<$!{tableInfo.name}> selectAll() {
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.selectAll();
     }
     
    /**
     * 根据条件查询
     *
     * @return 实例对象的集合
     */
    @Override
    public List<$!{tableInfo.name}> selectList($!{tableInfo.name} $!{tool.firstLowerCase($!{tableInfo.name})}) {
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.selectList($!{tool.firstLowerCase($!{tableInfo.name})});
    }
    
    /**
     * 新增数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 实例对象
     */
    @Override
    @Transactional
    public int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.insert($!tool.firstLowerCase($!{tableInfo.name}));
    }

    /**
     * 批量新增
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name})s 实例对象的集合
     * @return 生效的条数
     */
    @Override
    @Transactional
    public int batchInsert(List<$!{tableInfo.name}> $!tool.firstLowerCase($!{tableInfo.name})s) {
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.batchInsert($!tool.firstLowerCase($!{tableInfo.name})s);
    }

    /**
     * 修改数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 实例对象
     */
    @Override
    @Transactional
    public $!{tableInfo.name} update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
        this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.update($!tool.firstLowerCase($!{tableInfo.name}));
        return this.selectById($!{tool.firstLowerCase($!{tableInfo.name})}.get$!tool.firstUpperCase($pk.name)());
    }

    /**
     * 通过主键删除数据
     *
     * @param $!pk.name 主键
     * @return 是否成功
     */
    @Override
    @Transactional
    public int deleteById($!pk.shortType $!pk.name) {
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.deleteById($!pk.name);
    }
    
    /**
     * 查询总数据数
     *
     * @return 数据总数
     */
     @Override
     public int count(){
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.count();
     }
}

dao层:dao.java代码如下

##定义初始变量
#set($tableName = $tool.append($tableInfo.name, "Dao"))
##设置回调
$!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 $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * $!{tableInfo.comment}($!{tableInfo.name})表数据库访问层
 *
 * @author protagonist
 * @since $!time.currTime()
 */
 @Mapper
public interface $!{tableName} {

    /**
     * 通过ID查询单条数据
     *
     * @param $!pk.name 主键
     * @return 实例对象
     */
    $!{tableInfo.name} selectById($!pk.shortType $!pk.name);
    
    /**
     * 查询全部
     *
     * @return 对象列表
     */
    List<$!{tableInfo.name}> selectAll();
    
    /**
     * 通过实体作为筛选条件查询
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 对象列表
     */
    List<$!{tableInfo.name}> selectList($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * 新增数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 影响行数
     */
    int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
    
    /**
     * 批量新增
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name})s 实例对象的集合
     * @return 影响行数
     */
    int batchInsert(List<$!{tableInfo.name}> $!tool.firstLowerCase($!{tableInfo.name})s);
    
    /**
     * 修改数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 影响行数
     */
    int update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * 通过主键删除数据
     *
     * @param $!pk.name 主键
     * @return 影响行数
     */
    int deleteById($!pk.shortType $!pk.name);

    /**
     * 查询总数据数
     *
     * @return 数据总数
     */
    int count();
}

mapper.xml代码如下:

##引入mybatis支持
$!mybatisSupport

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

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




    
    
#foreach($column in $tableInfo.fullColumn)
        
#end
    
    
    
    
        #allSqlColumn()
    
    
    
    

    
    

    
    

    
    
        insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($velocityHasNext), #end#end)
        values ( #foreach($column in $tableInfo.fullColumn)#{$!{column.name}}#if($velocityHasNext), #end#end)
    
    
    
    
        insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($velocityHasNext), #end#end)
        values 
        
        (
            #foreach($column in $tableInfo.fullColumn)
            #{item.$!{column.name}}#if($velocityHasNext), #end
#end
         )
         
    

    
    
        update $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name}
        
        #foreach($column in $tableInfo.otherColumn)
            
                $!column.obj.name = #{$!column.name},
            
        #end
        
        where $!pk.obj.name = #{$!pk.name}
    

    
    
        delete from $!{tableInfo.obj.name} where $!pk.obj.name = #{$!pk.name}
    
    
    
                             

IT培训机构一般有哪些课程?

2024-07-09 浏览次数:0

我们的第六年,谢谢你的支持

2024-07-09 浏览次数:0

成都哪里有Java架构师培训?学费大概多少钱?

2024-07-09 浏览次数:0

it培训如何选择好的培训机构——It培训常见问题

2024-07-09 浏览次数:0

Tomcat的介绍与安装

2024-07-09 浏览次数:0

西北工业大学遭网络攻击,网络安全问题刻不容缓

2024-07-09 浏览次数:0
最新资讯
成都Java开发前景怎么样?成...   随着科技的不断发展,Java作为一种流行的编程语言,被广泛应用于软件开发和数据分析等领域,成为了...
鸿蒙开发有必要学吗?汇智知了堂...   随着信息技术的飞速发展,鸿蒙操作系统作为华为自主研发的系统,其在市场上的影响力日益增强。那么,鸿...
学鸿蒙选择南向还是北向?为何北...   随着鸿蒙操作系统的快速发展,越来越多的开发者对鸿蒙开发产生了浓厚的兴趣。然而,在开始学习鸿蒙开发...
如何学习学前端开发?不要错过转...   如何学习前端开发?在培训机构中,60%的学习前端是转行者,所以在效率方面,学习前端开发和注册培训...
鸿蒙系统未来前景?鸿蒙开发有必... 随着科技的快速发展,操作系统作为连接硬件与软件的关键环节,其重要性不言而喻。近年来,华为推出的鸿蒙系...
鸿蒙开发有必要学吗?揭秘202...   随着科技的不断进步,鸿蒙系统作为华为推出的全新操作系统,已经在全球范围内引起了广泛关注。对于开发...
鸿蒙北向开发能找到工作吗?   在科技飞速发展的今天,鸿蒙系统的诞生为开发者们带来了前所未有的机遇与挑战。特别是鸿蒙北向开发,作...
转行学前端开发怎么学?转行者的...   转行学前端开发怎么学?培训机构中学习前端的60%都是转行者,所以从效率上来讲,要想学前端开发报名...
#foreach($column in $tableInfo.fullColumn) #end #allSqlColumn() insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($velocityHasNext), #end#end) values ( #foreach($column in $tableInfo.fullColumn)#{$!{column.name}}#if($velocityHasNext), #end#end) insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($velocityHasNext), #end#end) values ( #foreach($column in $tableInfo.fullColumn) #{item.$!{column.name}}#if($velocityHasNext), #end #end ) update $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name} #foreach($column in $tableInfo.otherColumn) $!column.obj.name = #{$!column.name}, #end where $!pk.obj.name = #{$!pk.name} delete from $!{tableInfo.obj.name} where $!pk.obj.name = #{$!pk.name}