EasyCode逆向工程

Posted 唐微港

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EasyCode逆向工程相关的知识,希望对你有一定的参考价值。

描述

平时在做开发的时候,时常会根据数据表定义一些实体类,domain或者entity。如果一个一个的新建类然后在一个一个字段的添加就显得比较麻烦,可能有人这时候就想到了mybatis的代码逆向工程插件或者是mybatis-plus的。那么没有使用这两个框架或者生成的代码类型不是自己想要的呢。

其实idea有一款比较好用的逆向工程插件叫做EasyCode,可以用于反向生成代码

准备

安装

如果要使用这款插件,那肯定是要先安装。

  • 方式一

    打卡idea > File > Setting > Plugins > 点击Marketplace 然后搜索EasyCode ,找到后安装即可(我安装的是EasyCode-MybatisCodeHelper),似乎旧版本的EasyCode已经没有在维护了。

  • 方式二

    有可能自己的网络访问不了插件市场,那么可以到官方插件市场下载到本地后进行本地安装也同样可以。

    下载地址:https://plugins.jetbrains.com/

下载完成后打卡idea > File > Setting > Plugins > 点击设置图表 > Install from disk

配置

因为在生成domain或者entity的时候要涉及到数据库表的字段类型和Java的类型映射问题,所以需要先进行相应的配置

打开 File > Setting > Other Setting > 点击EasyCode-MybatisCodeHelper > 点击Type Mapper

此时会看到有columnType,javaType两个类型,这两个类型分别代表了数据库字段类型和Java中实体类的类型,在做映射的时候有满足对应类型的就会自动进行映射

  • ·下面附上我自己定义的类型,如果有还没添加的类型,直接添加进去即可
  • (\\(\\d+\\))?表示匹配量,例如数据库中的有些字段是varchar(32),有些是varchar(64),在生成映射时都会自动匹配成java.lang.String。同样的道理(\\(1\\))?就是永远只匹配为1的,例如类型为bit(1)的就直接匹配到了java.lang.Boolean
varchar((\\d+))?java.lang.String
char((\\d+))?java.lang.String
textjava.lang.String
decimal((\\d+))?java.lang.Double
decimal((\\d+,\\d+))?java.lang.Double
integerjava.lang.Integer
int((\\d+))?java.lang.Integer
int4java.lang.Integer
int8java.lang.Long
bigint((\\d+))?java.lang.Long
datetimejava.time.ZonedDateTime
timestamp((\\d+))?java.time.ZonedDateTime
booleanjava.lang.Boolean
number((\\d+))?java.lang.Double
varchar2((\\d+))?java.lang.String
number((*))?java.lang.Long
number((\\d+,\\d+))?java.math.BigDecimal
float((\\d+))?java.math.BigDecimal
clobjava.lang.String
tinyint((\\d+))?java.lang.Boolean
timestampjava.time.ZonedDateTime
bit((1))?java.lang.Boolean
datejava.time.ZonedDateTime

模板

生成的代码风格类型可以根据自己的定义的模板类型生成。

  • 点击File > Setting > Other Setting > 点击EasyCode-MybatisCodeHelper > 点击Template Setting

定义模板需要用到的语法如下:

    属性
    $author 设置中的作者 java.lang.String
    $encode 设置的编码 java.lang.String
    $modulePath 选中的module路径 java.lang.String
    $projectPath 项目绝对路径 java.lang.String

    对象
    $tableInfo 表对象
        obj 表原始对象 com.intellij.database.model.DasTable
        name 表名(转换后的首字母大写)java.lang.String
        comment 表注释 java.lang.String
        fullColumn 所有列 java.util.List<ColumnInfo>
        pkColumn 主键列 java.util.List<ColumnInfo>
        otherColumn 其他列 java.util.List<ColumnInfo>,除主键以外的列
        savePackageName 保存的包名 java.lang.String
        savePath 保存路径 java.lang.String
        saveModelName 保存的model名称 java.lang.String
    	columnInfo 列对象
        obj 列原始对象 com.intellij.database.model.DasColumn
        name 列名(首字母小写) java.lang.String
        comment 列注释 java.lang.String
        type 列类型(类型全名) java.lang.String
        shortType 列类型(短类型) java.lang.String
        custom 是否附加列 java.lang.Boolean
        ext 附加字段(Map类型) java.lang.Map<java.lang.String, java.lang.Object>
  
        $tableInfoList java.util.List<TableInfo>所有选中的表
    
        $importList 所有需要导入的包集合 java.util.Set<java.lang.String>

    回调
    &callback    setFileName(String) 设置文件储存名字
        		setSavePath(String) 设置文件储存路径,默认使用选中路径

    工具
    $tool
        firstUpperCase(String name) 首字母大写方法
        firstLowerCase(String name) 首字母小写方法
        getClsNameByFullName(String fullName) 通过包全名获取类名
        getJavaName(String name) 将下划线分割字符串转驼峰命名(属性名)
        getClassName(String name) 将下划线分割字符串转驼峰命名(类名)
        append(Object... objs) 多个数据进行拼接
        newHashSet(Object... objs) 创建一个HashSet对象
        newArrayList(Object... objs) 创建一个ArrayList对象
        newLinkedHashMap() 创建一个LinkedHashMap()对象
        newHashMap() 创建一个HashMap()对象
        getField(Object obj, String fieldName) 获取对象的属性值,可以访问任意修饰符修饰的属性.配合debug方法		使用.
        call(Object... objs) 空白执行方法,用于调用某些方法时消除返回值
        debug(Object obj) 调式方法,用于查询对象结构.可查看对象所有属性与public方法
        serial() 随机获取序列化的UID
        service(String serviceName, Object... param)远程服务调用
        parseJson(String) 将字符串转Map对象
        toJson(Object, Boolean) 将对象转json对象,Boolean:是否格式化json,不填时为不格式化。
    
        $time
        currTime(String format) 获取当前时间,指定时间格式(默认:yyyy-MM-dd HH:mm:ss)
    
        $generateService
        run(String, Map<String,Object>) 代码生成服务,参数1:模板名称,参数2:附加参数。

**附上一个定义好的模板作为参考 **

domain.java

##引入宏定义
$!define

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

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

##使用全局变量实现默认包导入
$!autoImport
import com.hand.hcf.core.domain.Domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
##使用宏定义实现类注释信息
/**
 * @description $!{tableInfo.comment}($tableInfo.obj.getName())表实体类
 * @author weigang.tang
 * @date $!time.currTime()
 */
 
@TableName(value = "$tableInfo.obj.getName().toLowerCase()")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class $!{tableInfo.name} extends Domain {
#foreach($column in $tableInfo.fullColumn)
    #if($column.obj.getName().toLowerCase()!="id"&&$column.obj.getName().toLowerCase()!="version_number"&&$column.obj.getName().toLowerCase()!="created_date"
    &&$column.obj.getName().toLowerCase()!="created_by"&&$column.obj.getName().toLowerCase()!="last_updated_date"&&$column.obj.getName().toLowerCase()!="last_updated_by")
        #if(${column.comment})
            
    /**
     * ${column.comment} 
     */
#end
    @TableField(value = "$column.obj.getName().toLowerCase()")
#if($column.shortType == "Long")
    @JsonSerialize(using = ToStringSerializer.class)
#end    
    private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
    
#end
#end
}

生成

连接数据库

定义好了模板之后,就可以实用idea自带的数据库连接工具连接后生成对应的代码,如图所示,点击idea最右侧边栏后会弹出如下的窗口

生成代码

连接好了数据库之后,点开对应的表,然后右键点击点击EasyCodeMybatisHelper->Generate Code,先择好生成后存放到的包和对应要生成哪些文件,然后点击ok即可生成

以上是关于EasyCode逆向工程的主要内容,如果未能解决你的问题,请参考以下文章

EasyCode逆向工程

idea 使用 easyCode 插件快速生成代码,类似mybatis逆向生成代码

测试工具-代码工具EasyCode

EasyCode介绍及自定义模板

idea插件:逆向工程插件--easy code

idea插件:逆向工程插件--easy code