Idea Java代码生成器使用及模板自定义

1、安装插件 EasyCode

2、连接数据库

重启之后在右边栏会出现这个。

3、选择数据源(以MYSQL为例)


选择需要生成的数据源并配置连接。

![在这里插入图片描述](https://img-blog.csdnimg.cn/aa723ae6dda544c9af7da6865d6292c8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m96KGj5rih5rGfLeWQleWtkOaYjg==,size_20,color_FFFFFF,t_70,g_se,x_16

如果有提示安装的点击安装。

选择需要的表所在库。

4、自动生成代码

选中该数据表,点击右键


然后会出现一个配置页面


选择你需要创建的文件,指明放置的包名和路径,点击OK完成。

拓展: 自定义生成模板

点击 File->Settings->Other Settings->easyCode->Template


到这就添加自己的模板文件,或者修改成符合自己的。

VO实体类

##引入宏定义
$!{define.vm}##使用宏定义设置回调(保存位置与文件后缀)
#save("/entity", ".java")##使用宏定义设置包后缀
#setPackageSuffix("entity")##使用全局变量实现默认包导入
$!{autoImport.vm}
import java.io.Serializable;##使用宏定义实现类注释信息
#tableComment("实体类")
public class $!{tableInfo.name} implements Serializable {private static final long serialVersionUID = $!tool.serial();
#foreach($column in $tableInfo.fullColumn)#if(${column.comment})/*** ${column.comment}*/#endprivate $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end#foreach($column in $tableInfo.fullColumn)
##使用宏定义实现get,set方法
#getSetMethod($column)
#end}

controller

##定义初始变量
#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.Itf.$!{tableInfo.name}ServiceItf;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import com.zhulong.zjpt.common.core.controller.BaseController;
import com.zhulong.zjpt.common.core.domain.AjaxResult;
import com.zhulong.zjpt.common.core.page.TableDataInfo;
import java.util.List;import javax.annotation.Resource;/*** $!{tableInfo.comment}($!{tableInfo.name})表控制层** @author $!author* @since $!time.currTime()*/
@RestController
@RequestMapping("$!tool.firstLowerCase($tableInfo.name)")
public class $!{tableName} extends BaseController {/*** 服务对象*/@Resourceprivate $!{tableInfo.name}ServiceItf $!tool.firstLowerCase($tableInfo.name)Service;/*** 分页查询** @param $!{tool.firstLowerCase($tableInfo.name)} 筛选条件* @return 查询结果*/@GetMapping("/queryByPage")public TableDataInfo queryList($!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}) {startPage();List<$!{tableInfo.name}> $!{tool.firstLowerCase($tableInfo.name)}s = $!{tool.firstLowerCase($tableInfo.name)}Service.queryList($!{tool.firstLowerCase($tableInfo.name)});return getDataTable($!{tool.firstLowerCase($tableInfo.name)}s);}/*** 通过主键查询单条数据** @param id 主键* @return 单条数据*/@GetMapping("/queryById/{id}")public AjaxResult queryById(@PathVariable("id") $!pk.shortType id) {return AjaxResult.success(this.$!{tool.firstLowerCase($tableInfo.name)}Service.queryById(id));}/*** 新增数据** @param $!{tool.firstLowerCase($tableInfo.name)} 实体* @return 新增结果*/@PostMapping("/install")public AjaxResult add($!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}) {return AjaxResult.success(this.$!{tool.firstLowerCase($tableInfo.name)}Service.insert($!{tool.firstLowerCase($tableInfo.name)}));}/*** 编辑数据** @param $!{tool.firstLowerCase($tableInfo.name)} 实体* @return 编辑结果*/@PostMapping("/update")public AjaxResult edit($!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}) {return AjaxResult.success(this.$!{tool.firstLowerCase($tableInfo.name)}Service.update($!{tool.firstLowerCase($tableInfo.name)}));}/*** 删除数据** @param id 主键* @return 删除是否成功*/@GetMapping("/deleteById")public AjaxResult deleteById($!pk.shortType id) {return AjaxResult.success(this.$!{tool.firstLowerCase($tableInfo.name)}Service.deleteById(id));}}

mapper.xml

##引入mybatis支持
$!{mybatisSupport.vm}##设置保存名称与保存位置
$!callback.setFileName($tool.append($!{tableInfo.name}, "Mapper.xml"))
$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mapper/approve"))##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())#set($pk = $tableInfo.pkColumn.get(0))
#end<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="$!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper"><resultMap type="$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}" id="$!{tableInfo.name}Map">
#foreach($column in $tableInfo.fullColumn)<result property="$!column.name" column="$!column.obj.name" jdbcType="$!column.ext.jdbcType"/>
#end</resultMap><!--查询单个--><select id="queryById" resultMap="$!{tableInfo.name}Map">select#allSqlColumn()from $!tableInfo.obj.namewhere $!pk.obj.name = #{$!pk.name}</select><!--查询指定行数据--><select id="queryAll" resultMap="$!{tableInfo.name}Map">select#allSqlColumn()from $!tableInfo.obj.name<where>
#foreach($column in $tableInfo.fullColumn)<if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">and $!column.obj.name = #{$!column.name}</if>
#end</where></select><!--统计总行数--><select id="count" resultType="java.lang.Long">select count(1)from $!tableInfo.obj.name<where>
#foreach($column in $tableInfo.fullColumn)<if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">and $!column.obj.name = #{$!column.name}</if>
#end</where></select><!--新增所有列--><insert id="insert" keyProperty="$!pk.name" useGeneratedKeys="true">insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end)values (#foreach($column in $tableInfo.otherColumn)#{$!{column.name}}#if($velocityHasNext), #end#end)</insert><insert id="insertBatch" keyProperty="$!pk.name" useGeneratedKeys="true">insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end)values<foreach collection="entities" item="entity" separator=",">(#foreach($column in $tableInfo.otherColumn)#{entity.$!{column.name}}#if($velocityHasNext), #end#end)</foreach></insert><insert id="insertOrUpdateBatch" keyProperty="$!pk.name" useGeneratedKeys="true">insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end)values<foreach collection="entities" item="entity" separator=",">(#foreach($column in $tableInfo.otherColumn)#{entity.$!{column.name}}#if($velocityHasNext), #end#end)</foreach>on duplicate key update#foreach($column in $tableInfo.otherColumn)$!column.obj.name = values($!column.obj.name)#if($velocityHasNext),#end#end</insert><!--通过主键修改数据--><update id="update">update $!{tableInfo.obj.name}<set>
#foreach($column in $tableInfo.otherColumn)<if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">$!column.obj.name = #{$!column.name},</if>
#end</set>where $!pk.obj.name = #{$!pk.name}</update><!--通过主键删除--><delete id="deleteById">delete from $!{tableInfo.obj.name} where $!pk.obj.name = #{$!pk.name}</delete></mapper>

setviceItf

##定义初始变量
#set($tableName = $tool.append($tableInfo.name, "ServiceItf"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service/Itf"))##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())#set($pk = $tableInfo.pkColumn.get(0))
#end#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service.Itf;import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import java.util.List;/*** $!{tableInfo.comment}($!{tableInfo.name})表服务接口** @author $!author* @since $!time.currTime()*/
public interface $!{tableName} {/*** 通过ID查询单条数据** @param $!pk.name 主键* @return 实例对象*/$!{tableInfo.name} queryById($!pk.shortType $!pk.name);/*** 分页查询** @param $!tool.firstLowerCase($!{tableInfo.name}) 筛选条件* @return 查询结果*/List<$!{tableInfo.name}> queryList($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));/*** 新增数据** @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象* @return 实例对象*/$!{tableInfo.name} insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));/*** 修改数据** @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象* @return 实例对象*/$!{tableInfo.name} update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));/*** 通过主键删除数据** @param $!pk.name 主键* @return 是否成功*/boolean deleteById($!pk.shortType $!pk.name);}

serviceImpl

##定义初始变量
#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}.mapper.$!{tableInfo.name}Mapper;
import $!{tableInfo.savePackageName}.service.Itf.$!{tableInfo.name}ServiceItf;
import org.springframework.stereotype.Service;
import java.util.List;import javax.annotation.Resource;/*** $!{tableInfo.comment}($!{tableInfo.name})表服务实现类** @author $!author* @since $!time.currTime()*/
@Service("$!tool.firstLowerCase($!{tableInfo.name})Service")
public class $!{tableName} implements $!{tableInfo.name}ServiceItf {@Resourceprivate $!{tableInfo.name}Mapper $!tool.firstLowerCase($!{tableInfo.name})Mapper;/*** 通过ID查询单条数据** @param $!pk.name 主键* @return 实例对象*/@Overridepublic $!{tableInfo.name} queryById($!pk.shortType $!pk.name) {return this.$!{tool.firstLowerCase($!{tableInfo.name})}Mapper.queryById($!pk.name);}/*** 分页查询** @param $!{tool.firstLowerCase($tableInfo.name)} 筛选条件* @return 查询结果*/@Overridepublic List<$!{tableInfo.name}> queryList($!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}) {return this.$!{tool.firstLowerCase($tableInfo.name)}Mapper.queryAll($!{tool.firstLowerCase($tableInfo.name)});}/*** 新增数据** @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象* @return 实例对象*/@Overridepublic $!{tableInfo.name} insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {this.$!{tool.firstLowerCase($!{tableInfo.name})}Mapper.insert($!tool.firstLowerCase($!{tableInfo.name}));return $!tool.firstLowerCase($!{tableInfo.name});}/*** 修改数据** @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象* @return 实例对象*/@Overridepublic $!{tableInfo.name} update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {this.$!{tool.firstLowerCase($!{tableInfo.name})}Mapper.update($!tool.firstLowerCase($!{tableInfo.name}));return this.queryById($!{tool.firstLowerCase($!{tableInfo.name})}.get$!tool.firstUpperCase($pk.name)());}/*** 通过主键删除数据** @param $!pk.name 主键* @return 是否成功*/@Overridepublic boolean deleteById($!pk.shortType $!pk.name) {return this.$!{tool.firstLowerCase($!{tableInfo.name})}Mapper.deleteById($!pk.name) > 0;}
}

mapper.java

##定义初始变量
#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 java.util.List;
import org.apache.ibatis.annotations.Param;/*** $!{tableInfo.comment}($!{tableInfo.name})表数据库访问层** @author $!author* @since $!time.currTime()*/
public interface $!{tableName} {/*** 通过ID查询单条数据** @param $!pk.name 主键* @return 实例对象*/$!{tableInfo.name} queryById($!pk.shortType $!pk.name);/*** 查询指定行数据** @param $!tool.firstLowerCase($!{tableInfo.name}) 查询条件* @return 对象列表*/List<$!{tableInfo.name}> queryAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));/*** 统计总行数** @param $!tool.firstLowerCase($!{tableInfo.name}) 查询条件* @return 总行数*/long count($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));/*** 新增数据** @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象* @return 影响行数*/int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));/*** 批量新增数据(MyBatis原生foreach方法)** @param entities List<$!{tableInfo.name}> 实例对象列表* @return 影响行数*/int insertBatch(@Param("entities") List<$!{tableInfo.name}> entities);/*** 批量新增或按主键更新数据(MyBatis原生foreach方法)** @param entities List<$!{tableInfo.name}> 实例对象列表* @return 影响行数* @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参*/int insertOrUpdateBatch(@Param("entities") List<$!{tableInfo.name}> entities);/*** 修改数据** @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象* @return 影响行数*/int update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));/*** 通过主键删除数据** @param $!pk.name 主键* @return 影响行数*/int deleteById($!pk.shortType $!pk.name);}

Idea Java代码生成器使用及模板自定义相关推荐

  1. freemarker 生成java_半自动化Java代码生成器[利用freemarker模板生成]

    rapid-generator 半自动化Java代码生成器[利用freemarker模板生成] 增加一些定制和扩展, 修改为基于MAVEN的格式. 整体架构保持不变. 增加的特性为: 支持表名前缀去除 ...

  2. Java之利用Freemarker模板引擎实现代码生成器,提高效率

    开心一笑 [1.你以为我会眼睁睁的看着你去送死?我会闭着眼睛.2.给你讲个故事,从前有个笨蛋,他非常笨,别人问他问题他只会回答"没有",这个故事你听过吗?] 视频教程 大家好,我录 ...

  3. 原来这就是Java代码生成器的原理啊,太简单了

    1. 前言 前几天写了篇关于代码生成器的文章(可查看历史文章),不少同学私下问我这个代码生成器是如何运作的,为什么要用到一些模板引擎,所以今天来说明下代码生成器的流程. 2. 代码生成器的使用场景 我 ...

  4. java自动生成代码原理_原来这就是Java代码生成器的原理啊,太简单了

    前几天写了篇关于代码生成器的文章(可查看历史文章),不少同学私下问我这个代码生成器是如何运作的,为什么要用到一些模板引擎,所以今天来说明下代码生成器的流程. 2. 代码生成器的使用场景 我们在编码中存 ...

  5. 双鱼林java_双鱼林Java代码生成器

    双鱼林Java代码生成器是一款基于三层模式的.net环境代码生成工具,生成的目标程序使用的是c#脚本语言,可以直接导入到visual studio 2008以上版本运行,目前已经实现了数据层,业务逻辑 ...

  6. java微信推送模板销消息(微信测试号)

    java微信推送模板销消息(微信测试号) 相关jar包(红框内) 如果仅需推送模板消息,不对用户动作进行处理的话不需进行服务器配置 下面的操作皆借助于微信的测试号,点击下方链接进入登录页,微信扫描即可 ...

  7. Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论

    Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...

  8. Java通过泛型的模板类型实例化对象

    Java通过泛型的模板类型实例化对象 最近自己研究了下mvvm框架,使用泛型的方式可节省很多代码,并且可以合并很多冗余代码,为了最大化的精简代码想到了通过泛型的type用反射的方式实例化对象,这样对象 ...

  9. [转] 使用模板自定义 WPF 控件

      [转] 使用模板自定义 WPF 控件                                                                                 ...

  10. 五十八、深入了解 Java 中的注解和自定义注解

    @Author:Runsen @Date:2020/7/9 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

最新文章

  1. 反编译得到的java文件好多错误 val$query什么意思_这部分代码有错么?一直提示输入框$(#msg).val()得到的值未定义...
  2. 前端一HTML:十:选择器
  3. 【Python】is 和 == 的区别
  4. 计算机设备记录人耳感知不到的声音,现代教育技术考试复习资料新
  5. 晚上我们一起去白码会所玩啊!
  6. 【收藏】需求文档(PRD)终极撰写指南
  7. 招聘 | 深圳人工智能与机器人研究院 扩展现实研究中心
  8. C#学习-程序集和反射
  9. tensorflow随机梯度下降算法使用滑动平均模型
  10. 银行招聘考试题库计算机,2019银行招聘计算机试题(一)答案
  11. MATLAB秦九韶算法
  12. css实现时间数字特效字体格式
  13. android手机charles证书下载
  14. NERO-光盘刻录程序教程集
  15. 「解决方案」用户变电站配电监控解决方案
  16. [Latex]visio画图导入矢量图到Latex | 裁剪pdf | 去掉pdf白边
  17. html 特殊符号怎么打出来,特殊符号怎么打出来_特殊符号图案大全-太平洋电脑网...
  18. 电脑键盘部分按键失灵_笔记本键盘部分失灵怎么办,笔记本个别键失灵的处理方法...
  19. 在字符串s的第n个字符后面插入字符串t
  20. WPF——OXY绘图_old

热门文章

  1. Mysql数据库存储内存调整与优化
  2. mysql必知必会样例表_《SQL必知必会》笔记1-样例表说明及建表语句
  3. python机器学习之物体识别
  4. python实现设计模式
  5. mysql建表常用sql语句
  6. Linux安装gcc方法(超简单安装)
  7. yacc语法学习-part1
  8. Java入门到进阶推荐书籍
  9. web-----简单小游戏项目
  10. 3万字操作系统常用知识总结