day49_代码生成器EasyCode

2023-12-20 19:28
文章标签 day49 代码生成 easycode

本文主要是介绍day49_代码生成器EasyCode,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

IDEA安装插件

easycode插件

image-20230909231216061

使用

image-20230909231508989

image-20230909231606053

修改模板

因为默认模板有些不适用自己项目,所以需要修改,以下是我的模板json文件

  • 生成了Controller,Service,Dao,Entity
  • 没有前后端交互的R,需要自己导入

在磁盘新建一个EasyCodeConfig.json,将以下代码赋值粘贴进去,

然后在idea的easycode插件中导入

{"author" : "Taotie","version" : "1.2.8","userSecure" : "","currTypeMapperGroupName" : "Default","currTemplateGroupName" : "Default","currColumnConfigGroupName" : "Default","currGlobalConfigGroupName" : "Default","typeMapper" : { },"template" : {"Default" : {"name" : "Default","elementList" : [ {"name" : "controller.java.vm","code" : "##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"Controller\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/controller\"))\n##拿到主键\n#if(!$tableInfo.pkColumn.isEmpty())\n    #set($pk = $tableInfo.pkColumn.get(0))\n#end\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}controller;\n\nimport $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};\nimport $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;\nimport org.springframework.web.bind.annotation.*;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.web.bind.annotation.*;\nimport com.qf.util.R;\n/**\n * $!{tableInfo.comment}($!{tableInfo.name})表控制层\n *\n * @author $!author\n * @since $!time.currTime()\n */\n@RestController\n@RequestMapping(\"/api/$!tool.firstLowerCase($tableInfo.name)\")\npublic class $!{tableName} {\n    /**\n     * 服务对象\n     */\n    @Autowired\n    private $!{tableInfo.name}Service $!tool.firstLowerCase($tableInfo.name)Service;\n\n    /**\n     * 分页查询\n     *\n     * @return 查询结果\n     */\n    @GetMapping(\"/list/page\")\n    public R queryByPage($!pk.shortType pageNum) {\n        return R.ok(this.$!{tool.firstLowerCase($tableInfo.name)}Service.queryByPage(pageNum));\n    }\n\n    /**\n     * 通过主键查询单条数据\n     *\n     * @param id 主键\n     * @return 单条数据\n     */\n    @GetMapping(\"/{id}\")\n    public R queryById(@PathVariable(\"id\") $!pk.shortType id) {\n        return R.ok(this.$!{tool.firstLowerCase($tableInfo.name)}Service.queryById(id));\n    }\n\n    /**\n     * 新增数据\n     *\n     * @param $!{tool.firstLowerCase($tableInfo.name)} 实体\n     * @return 新增结果\n     */\n    @PostMapping(\"/save\")\n    public R add(@RequestBody $!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}) {\n        this.$!{tool.firstLowerCase($tableInfo.name)}Service.insert($!{tool.firstLowerCase($tableInfo.name)});\n        return R.ok();\n    }\n\n    /**\n     * 编辑数据\n     *\n     * @param $!{tool.firstLowerCase($tableInfo.name)} 实体\n     * @return 编辑结果\n     */\n    @PostMapping(\"/edit\")\n    public R edit(@RequestBody $!{tableInfo.name} $!{tool.firstLowerCase($tableInfo.name)}) {\n        return R.ok(this.$!{tool.firstLowerCase($tableInfo.name)}Service.update($!{tool.firstLowerCase($tableInfo.name)}));\n    }\n\n    /**\n     * 删除数据\n     *\n     * @param id 主键\n     * @return 删除是否成功\n     */\n    @GetMapping(\"/del\")\n    public R deleteById($!pk.shortType id) {\n        return R.ok(this.$!{tool.firstLowerCase($tableInfo.name)}Service.deleteById(id));\n    }\n\n}\n"}, {"name" : "debug.json.vm","code" : "// 禁止将生成结果写入到文件\n$!callback.setWriteFile(false)\n\n//调试表原始对象\n$!tool.debug($tableInfo.obj)\n\n//调试列原始对象\n$!tool.debug($tableInfo.fullColumn.get(0).obj)\n\n//调试列原始列类型\n$!tool.debug($tableInfo.fullColumn.get(0).obj.dataType)\n\n//获取原始列类型中的字段\nsqlType = $!tool.getField($tableInfo.fullColumn.get(0).obj.dataType, \"typeName\")\n\n//执行原始列类型中的方法\nsqlTypeLen = $!tableInfo.fullColumn.get(0).obj.dataType.getLength()\n"}, {"name" : "entity.java.vm","code" : "##引入宏定义\n$!{define.vm}\n\n##使用宏定义设置回调(保存位置与文件后缀)\n#save(\"/entity\", \".java\")\n\n##使用宏定义设置包后缀\n#setPackageSuffix(\"entity\")\n\n##使用全局变量实现默认包导入\n$!{autoImport.vm}\nimport java.io.Serializable;\n\n##使用宏定义实现类注释信息\n#tableComment(\"实体类\")\npublic class $!{tableInfo.name} implements Serializable {\n    private static final long serialVersionUID = $!tool.serial();\n#foreach($column in $tableInfo.fullColumn)\n    #if(${column.comment})/**\n     * ${column.comment}\n     */#end\n\n    private $!{tool.getClsNameByFullName($column.type)} $!{column.name};\n#end\n\n#foreach($column in $tableInfo.fullColumn)\n##使用宏定义实现get,set方法\n#getSetMethod($column)\n#end\n\n}\n"}, {"name" : "mapper.xml.vm","code" : "##引入mybatis支持\n$!{mybatisSupport.vm}\n\n##设置保存名称与保存位置\n$!callback.setFileName($tool.append($!{tableInfo.name}, \"Mapper.xml\"))\n$!callback.setSavePath($tool.append($modulePath, \"/src/main/resources/mapper\"))\n\n##拿到主键\n#if(!$tableInfo.pkColumn.isEmpty())\n    #set($pk = $tableInfo.pkColumn.get(0))\n#end\n\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"$!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper\">\n\n    <resultMap type=\"$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}\" id=\"$!{tableInfo.name}Map\">\n#foreach($column in $tableInfo.fullColumn)\n        <result property=\"$!column.name\" column=\"$!column.obj.name\" jdbcType=\"$!column.ext.jdbcType\"/>\n#end\n    </resultMap>\n\n    <!--查询单个-->\n    <select id=\"queryById\" resultMap=\"$!{tableInfo.name}Map\">\n        select\n          #allSqlColumn()\n###    新版2023.1idea 以及以后的都需要这么改\n###    修改当前文件中$velocityHasNext 为 $foreach.hasNext\n###    还需修改Global Config中mybatisSuport.vm中的$velocityHasNext改为$foreach.hasNext\n        from $!tableInfo.obj.name\n        where $!pk.obj.name = #{$!pk.name}\n    </select>\n\n    <!--查询多行数据-->\n    <select id=\"queryAllByLimit\" resultMap=\"$!{tableInfo.name}Map\">\n        select\n          #allSqlColumn()\n\n        from $!tableInfo.obj.name\n    </select>\n\n    <!--统计总行数-->\n    <select id=\"count\" resultType=\"java.lang.Long\">\n        select count(1)\n        from $!tableInfo.obj.name\n        <where>\n#foreach($column in $tableInfo.fullColumn)\n            <if test=\"$!column.name != null#if($column.type.equals(\"java.lang.String\")) and $!column.name != ''#end\">\n                and $!column.obj.name = #{$!column.name}\n            </if>\n#end\n        </where>\n    </select>\n\n    <!--新增所有列-->\n    <insert id=\"insert\" keyProperty=\"$!pk.name\" useGeneratedKeys=\"true\">\n        insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end)\n        values (#foreach($column in $tableInfo.otherColumn)#{$!{column.name}}#if($velocityHasNext), #end#end)\n    </insert>\n\n    <insert id=\"insertBatch\" keyProperty=\"$!pk.name\" useGeneratedKeys=\"true\">\n        insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end)\n        values\n        <foreach collection=\"entities\" item=\"entity\" separator=\",\">\n        (#foreach($column in $tableInfo.otherColumn)#{entity.$!{column.name}}#if($velocityHasNext), #end#end)\n        </foreach>\n    </insert>\n\n    <insert id=\"insertOrUpdateBatch\" keyProperty=\"$!pk.name\" useGeneratedKeys=\"true\">\n        insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end)\n        values\n        <foreach collection=\"entities\" item=\"entity\" separator=\",\">\n            (#foreach($column in $tableInfo.otherColumn)#{entity.$!{column.name}}#if($velocityHasNext), #end#end)\n        </foreach>\n        on duplicate key update\n        #foreach($column in $tableInfo.otherColumn)$!column.obj.name = values($!column.obj.name)#if($velocityHasNext),\n        #end#end\n\n    </insert>\n\n    <!--通过主键修改数据-->\n    <update id=\"update\">\n        update $!{tableInfo.obj.name}\n        <set>\n#foreach($column in $tableInfo.otherColumn)\n            <if test=\"$!column.name != null#if($column.type.equals(\"java.lang.String\")) and $!column.name != ''#end\">\n                $!column.obj.name = #{$!column.name},\n            </if>\n#end\n        </set>\n        where $!pk.obj.name = #{$!pk.name}\n    </update>\n\n    <!--通过主键删除-->\n    <delete id=\"deleteById\">\n        delete from $!{tableInfo.obj.name} where $!pk.obj.name = #{$!pk.name}\n    </delete>\n\n</mapper>\n"}, {"name" : "service.java.vm","code" : "##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"Service\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/service\"))\n\n##拿到主键\n#if(!$tableInfo.pkColumn.isEmpty())\n    #set($pk = $tableInfo.pkColumn.get(0))\n#end\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service;\n\nimport $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};\nimport java.util.List;\n/**\n * $!{tableInfo.comment}($!{tableInfo.name})表服务接口\n *\n * @author $!author\n * @since $!time.currTime()\n */\npublic interface $!{tableName} {\n\n    /**\n     * 通过ID查询单条数据\n     *\n     * @param $!pk.name 主键\n     * @return 实例对象\n     */\n    $!{tableInfo.name} queryById($!pk.shortType $!pk.name);\n\n    /**\n     * 分页查询\n     *\n     * @return 查询结果\n     */\n    List<$!{tableInfo.name}> queryByPage($!pk.shortType pageNum);\n\n    /**\n     * 新增数据\n     *\n     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n     * @return 实例对象\n     */\n    int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n    /**\n     * 修改数据\n     *\n     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n     * @return 实例对象\n     */\n    int update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n    /**\n     * 通过主键删除数据\n     *\n     * @param $!pk.name 主键\n     * @return 是否成功\n     */\n    boolean deleteById($!pk.shortType $!pk.name);\n\n}"}, {"name" : "serviceImpl.java.vm","code" : "##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"ServiceImpl\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/service/impl\"))\n\n##拿到主键\n#if(!$tableInfo.pkColumn.isEmpty())\n    #set($pk = $tableInfo.pkColumn.get(0))\n#end\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service.impl;\n\nimport $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};\nimport $!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper;\nimport $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;\nimport org.springframework.stereotype.Service;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport java.util.List;\n/**\n * $!{tableInfo.comment}($!{tableInfo.name})表服务实现类\n *\n * @author $!author\n * @since $!time.currTime()\n */\n@Service(\"$!tool.firstLowerCase($!{tableInfo.name})Service\")\npublic class $!{tableName} implements $!{tableInfo.name}Service {\n    @Autowired\n    private $!{tableInfo.name}Mapper $!tool.firstLowerCase($!{tableInfo.name})Mapper;\n\n    /**\n     * 通过ID查询单条数据\n     *\n     * @param $!pk.name 主键\n     * @return 实例对象\n     */\n    @Override\n    public $!{tableInfo.name} queryById($!pk.shortType $!pk.name) {\n        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Mapper.queryById($!pk.name);\n    }\n\n    /**\n     * 分页查询\n     *\n     * @return 查询结果\n     */\n    @Override\n    public List<$!{tableInfo.name}> queryByPage($!pk.shortType pageNum) {\n        return this.$!{tool.firstLowerCase($tableInfo.name)}Mapper.queryAllByLimit();\n    }\n\n    /**\n     * 新增数据\n     *\n     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n     * @return 实例对象\n     */\n    @Override\n    public int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {\n        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Mapper.insert($!tool.firstLowerCase($!{tableInfo.name}));\n    }\n\n    /**\n     * 修改数据\n     *\n     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n     * @return 实例对象\n     */\n    @Override\n    public int update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {\n        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Mapper.update($!tool.firstLowerCase($!{tableInfo.name}));\n    }\n\n    /**\n     * 通过主键删除数据\n     *\n     * @param $!pk.name 主键\n     * @return 是否成功\n     */\n    @Override\n    public boolean deleteById($!pk.shortType $!pk.name) {\n        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Mapper.deleteById($!pk.name) > 0;\n    }\n}"}, {"name" : "mapper.java.vm","code" : "##定义初始变量\n#set($tableName = $tool.append($tableInfo.name, \"Mapper\"))\n##设置回调\n$!callback.setFileName($tool.append($tableName, \".java\"))\n$!callback.setSavePath($tool.append($tableInfo.savePath, \"/mapper\"))\n\n##拿到主键\n#if(!$tableInfo.pkColumn.isEmpty())\n    #set($pk = $tableInfo.pkColumn.get(0))\n#end\n\n#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}mapper;\n\nimport $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};\nimport org.apache.ibatis.annotations.Param;\nimport java.util.List;\n\n/**\n * $!{tableInfo.comment}($!{tableInfo.name})表数据库访问层\n *\n * @author $!author\n * @since $!time.currTime()\n */\npublic interface $!{tableName} {\n\n    /**\n     * 通过ID查询单条数据\n     *\n     * @param $!pk.name 主键\n     * @return 实例对象\n     */\n    $!{tableInfo.name} queryById($!pk.shortType $!pk.name);\n\n    /**\n     * 查询指定行数据\n     *\n     * @return 对象列表\n     */\n    List<$!{tableInfo.name}> queryAllByLimit();\n\n    /**\n     * 统计总行数\n     *\n     * @param $!tool.firstLowerCase($!{tableInfo.name}) 查询条件\n     * @return 总行数\n     */\n    long count($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n    /**\n     * 新增数据\n     *\n     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n     * @return 影响行数\n     */\n    int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n    /**\n     * 批量新增数据(MyBatis原生foreach方法)\n     *\n     * @param entities List<$!{tableInfo.name}> 实例对象列表\n     * @return 影响行数\n     */\n    int insertBatch(@Param(\"entities\") List<$!{tableInfo.name}> entities);\n\n    /**\n     * 批量新增或按主键更新数据(MyBatis原生foreach方法)\n     *\n     * @param entities List<$!{tableInfo.name}> 实例对象列表\n     * @return 影响行数\n     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参\n     */\n    int insertOrUpdateBatch(@Param(\"entities\") List<$!{tableInfo.name}> entities);\n\n    /**\n     * 修改数据\n     *\n     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象\n     * @return 影响行数\n     */\n    int update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));\n\n    /**\n     * 通过主键删除数据\n     *\n     * @param $!pk.name 主键\n     * @return 影响行数\n     */\n    int deleteById($!pk.shortType $!pk.name);\n\n}\n"} ]}},"columnConfig" : { },"globalConfig" : { }
}

image-20230909232555754

这篇关于day49_代码生成器EasyCode的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/517202

相关文章

LLVM入门2:如何基于自己的代码生成IR-LLVM IR code generation实例介绍

概述 本节将通过一个简单的例子来介绍如何生成llvm IR,以Kaleidoscope IR中的例子为例,我们基于LLVM接口构建一个简单的编译器,实现简单的语句解析并转化为LLVM IR,生成对应的LLVM IR部分,代码如下,文件名为toy.cpp,先给出代码,后面会详细介绍每一步分代码: #include "llvm/ADT/APFloat.h"#include "llvm/ADT/S

jeecg——代码生成器配置

1.修改 数据源连接配置文件resources/jeecg/jeecg_database.properties

芋道源码微服务新建新的模块及代码生成器使用

目录 概述实践新建模块代码生成配置数据源代码生成拷贝代码pom.xml 其它的 问题redis权限配置 效果 结束 概述   芋道源码微服务新建新的模块及代码生成器使用。主要分三块,建立新的模块,代码生成及运行过程中的问题解决。 实践 新建模块   参考芋道源码本身的架构,新建的工程架构如下图所示,代码生成器也会生成对应的架构,但没有pom.xml这些配置文件,需要自己添加

Simulink代码生成:目标硬件配置

本文研究Simulink中关于目标硬件相关的配置。 文章目录 1 目标硬件的含义2 Simulink中的硬件配置3 代码中的位长度信息4 总结 1 目标硬件的含义 不管运行什么软件,都是无法离开硬件单独运行的。我们生活中常见的笔记本电脑、手机等都是硬件。 对于汽车嵌入式软件而言,目标硬件就是嵌入式控制器,譬如博主工作中所用的TC27X系列。在Simulink的配置中必须明确指定

Simulink代码生成: For Iterator子系统及其代码

本文研究Simulink中的For Iterator子系统及其生成的代码。 文章目录 1 Simulink中的For Iterator子系统2 For Iterator子系统建模示例3 For Iterator子系统的代码4 总结 1 Simulink中的For Iterator子系统 不管是在C语言还是Matlab脚本编程的时候,都避免不了使用for循环来反复执行某一段代码。在

Simulink代码生成:学习Simulink以及生成代码

本文介绍博主自己学习Simulink和Embedded Coder的方法。后续博客都会按照本文中的思路来记录博主学习的过程。 文章目录 1 Simulink模型2 Simulink配置3 Simulink生成的代码4 关于S函数和tlc文件5 实战 1 Simulink模型 通过建立正确的模型并且Update通过是生成代码的基础。所以生成代码的第一步是建模。 根据博主工作经验,

Simulink代码生成: Relay模块及其代码

本文研究Relay模块的用法和该模块生成的代码。 文章目录 1 Simulink中的Relay模块2 Relay模块建模3 Relay模块的代码4 总结 1 Simulink中的Relay模块 Relay这个单词有中继设备的含义,在Simulink中,博主将其理解为一个带有缓冲区的开关。 在配置界面可以配置Relay模块的阈值上限、阈值下限和输出的数值。 2 Relay模块建

Simulink代码生成:AliasType配置

AliasType也是Simulink数据字典中的一种对象。本文研究在数据字典中配置AliasType以及生成的代码。 文章目录 1 问题引入2 AliasType的建立和使用3 代码生成研究4 总结 1 问题引入 在Simulink中的数据类型有single,double,uint和int这些基本础类型,也可以给这些基本类型定义一个别名,这就是AliasType的概念。定义好A

Simulink代码生成:数据字典的建立、关联模型

本文介绍如何建立Simulink数据字典,并关联模型。 文章目录 1 数据字典的作用2 数据对象的简单概念3 数据对象的管理方式3.1 mat文件或m文件3.2 Excel表格&m脚本3.3 Simulink自带的数据字典文件 4 建立和关联Simulink数据字典文件5 sldd数据字典的一些说明6 总结 1 数据字典的作用 简单来说,数据字典的作用就是把一个模型用到的所有数据

JAVA:使用Generator生成器实现代码生成的技术指南

请关注微信公众号:拾荒的小海螺 博客地址:http://lsk-ww.cn/ 1、简述 在软件开发中,尤其是企业应用开发中,重复编写CRUD代码(创建、读取、更新、删除)是一项耗时且容易出错的任务。为了提高开发效率,许多开发者会使用代码生成器来自动生成这些重复的代码。本文将介绍如何使用Renren-Generator代码生成器来实现这一目标。 2、准备工作 在开始使用Renren-Gen