使用EasyCode插件在IntelliJ IDEA中自动化代码生成
- 数据库连接配置 采用MySQL数据库作为示例,其他关系型数据库同样适用。在IDEA右侧导航栏中打开数据库工具模块,点击连接按钮创建新数据源。
输入数据库连接参数(主机地址、端口号、用户名、密码)完成认证。若测试连接按钮不可用,请检查是否需要安装对应数据库驱动插件。
-
EasyCode插件安装 通过IDEA插件市场搜索并安装EasyCode插件。部分版本已预装该插件,安装完成后需要重启IDEA使配置生效。
-
代码生成流程 在数据库工具窗口中选择目标表,右键选择EasyCode生成代码功能。通过对话框指定生成代码的包路径和存储位置,系统将自动生成对应的数据访问层、实体类和数据传输对象。
-
模板自定义配置 进入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
- 代码模板示例 以下为不同类型的代码模板示例:
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扩展字段可在此添加
}