当前位置:首页 > 技术 > 正文内容

使用EasyCode插件在IntelliJ IDEA中自动化代码生成

访客 技术 2026年6月6日 1
  1. 数据库连接配置 采用MySQL数据库作为示例,其他关系型数据库同样适用。在IDEA右侧导航栏中打开数据库工具模块,点击连接按钮创建新数据源。

输入数据库连接参数(主机地址、端口号、用户名、密码)完成认证。若测试连接按钮不可用,请检查是否需要安装对应数据库驱动插件。

  1. EasyCode插件安装 通过IDEA插件市场搜索并安装EasyCode插件。部分版本已预装该插件,安装完成后需要重启IDEA使配置生效。

  2. 代码生成流程 在数据库工具窗口中选择目标表,右键选择EasyCode生成代码功能。通过对话框指定生成代码的包路径和存储位置,系统将自动生成对应的数据访问层、实体类和数据传输对象。

  3. 模板自定义配置 进入IDEA设置界面,找到EasyCode插件配置页面。通过导入自定义模板文件可修改生成代码的格式规范。针对MyBatis框架的JDBC类型映射规则需要特别调整,确保生成的XML文件兼容性。

## 自定义JDBC类型映射规则
#foreach($column in $tableInfo.fullColumn)
    #set($columnJdbcType = "OTHER")
    #if($column.type == "java.lang.String")
        #set($columnJdbcType = "VARCHAR")
    #elseif($column.type == "java.lang.Boolean")
        #set($columnJdbcType = "BOOLEAN")
    #elseif($column.type == "java.lang.Byte")
        #set($columnJdbcType = "BYTE")
    #elseif($column.type in ["java.lang.Integer", "int", "java.lang.Short", "short"])
        #set($columnJdbcType = "NUMERIC")
    #elseif($column.type in ["java.lang.Long", "long"])
        #set($columnJdbcType = "NUMERIC")
    #elseif($column.type in ["java.lang.Float", "float", "java.lang.Double", "double"])
        #set($columnJdbcType = "NUMERIC")
    #elseif($column.type in ["java.util.Date", "java.sql.Timestamp", "java.time.Instant", "java.time.LocalDateTime", "java.time.OffsetDateTime", "java.time.ZonedDateTime"])
        #set($columnJdbcType = "TIMESTAMP")
    #elseif($column.type in ["java.sql.Date", "java.time.LocalDate"])
        #set($columnJdbcType = "TIMESTAMP")
    #end
    $column.ext.jdbcType = $columnJdbcType
#end
  1. 代码模板示例 以下为不同类型的代码模板示例:

DAO接口模板:

## 定义基础变量
#set($interfaceName = $tool.append($tableInfo.name, "Dao"))
$!callback.setFileOutputName($interfaceName + ".java")
$!callback.setSavePath($tool.append($tableInfo.savePath, "/dao"))

## 获取主键字段
#if(!$tableInfo.pkColumn.isEmpty())
    #set($primaryKey = $tableInfo.pkColumn.get(0))
#end

package $!{tableInfo.savePackageName}.dao;

import $!{tableInfo.savePackageName}.dto.$!{tableInfo.name}Dto;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

@Mapper
public interface $!{interfaceName} {
    $!{tableInfo.name}Dto findById($!primaryKey.shortType $!primaryKey.name);
    List<$!{tableInfo.name}Dto> queryByPage(int offset, int limit);
    List<$!{tableInfo.name}Dto> queryByCriteria($!{tableInfo.name}Dto criteria);
    int insert($!{tableInfo.name}Dto entity);
    int update($!{tableInfo.name}Dto entity);
    int deleteById($!primaryKey.shortType id);
}

XML映射文件模板:

$!mybatisSupport
$!callback.setFileOutputName($!{tableInfo.name} + "Dao.xml")
$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mapper"))

<?xml version="1.0" encoding="UTF-8"?>
<mapper namespace="$!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Dao">
    <resultMap type="$!{tableInfo.savePackageName}.dto.$!{tableInfo.name}Dto" 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="findById" resultMap="$!{tableInfo.name}Map">
        SELECT #allSqlColumn() FROM $!tableInfo.obj.name WHERE $!primaryKey.obj.name = #{$!primaryKey.name}
    </select>

    <insert id="insert" keyProperty="$!primaryKey.name" useGeneratedKeys="true">
        INSERT INTO $!tableInfo.obj.name (#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end) 
        VALUES (#foreach($column in $tableInfo.otherColumn)#{$!column.name}#if($velocityHasNext), #end)
    </insert>
</mapper>

实体类模板:

## 引入基础配置
$!define

## 设置保存路径
#save("/entity", ".java")

## 包路径配置
#setPackageSuffix("entity")

/**
 * $!{tableInfo.comment}实体类
 * @author generator
 * @date $!time.currTime()
 */
import java.io.Serializable;
import lombok.Data;

@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
}

数据传输对象模板:

#set($dtoName = $tool.append($tableInfo.name, "Dto"))
$!callback.setFileOutputName($dtoName + ".java")
$!callback.setSavePath($tool.append($tableInfo.savePath, "/dto"))

package $!{tableInfo.savePackageName}.dto;

import lombok.Data;
import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};

@Data
public class $!{dtoName} extends $!{tableInfo.name} {
    // DTO扩展字段可在此添加
}

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。