在IDEA中使用groovy脚本生成POJO

该文介绍如何在IDEA中创建数据库连接并使其在所有窗口中共享,然后利用Groovy脚本自动化生成包括实体类、Service、Repository等在内的代码结构,涉及配置项如日期格式、注解使用等。

步骤1:打开Database窗格,新建数据库连接

 数据库连接默认只是当前工程使用,想要所有IDEA窗口共享

步骤2:编辑groovy脚本

步骤3:选择一张或多张表,生成代码

生成效果

:groovy脚本

import com.intellij.database.model.DasTable
import com.intellij.database.model.ObjectKind
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil


import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

config = [
        impSerializable  : true,
        extendBaseEntity : false,
        extendBaseService: true,
        useLombok        : true, // 使用注解,不生成get、set方法
        ModelNotNULL     : true, // 空值不返回注解
        ModelDate        : true, // 日期类格式注解
        baseMethods      : true, // ServiceImpl生成基础方法

        generateItem     : [
                "Entity",
                "Service",
                "ServiceImpl",
                "Repository",
                "RepositoryCustom",
                "RepositoryImpl",
                "Controller",
                "SOA",
                "Constants",
                "Config",
        ]
]


baseEntityProperties = ["id", "CreatedOn", "LastChangedOn", "version"]

typeMapping = [
        (~/(?i)bool|boolean|tinyint/)     : "Boolean",
        (~/(?i)bigint/)                   : "Long",
        (~/int/)                          : "Integer",
        (~/(?i)float|double|decimal|real|numeric/): "java.math.BigDecimal",
        (~/(?i)datetime|timestamp/)       : "java.util.Date",
        (~/(?i)date/)                     : "java.util.Date",
        (~/(?i)time/)                     : "java.sql.Time",
        (~/(?i)/)                         : "String"
]

FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir ->
    SELECTION.filter {
        it instanceof DasTable && it.getKind() == ObjectKind.TABLE
    }.each {
        generate(it, dir)
    }
}

// 生成对应的文件
def generate(table, dir) {

    def entityPath = "${dir.toString()}\\entity",
        servicePath = "${dir.toString()}\\service",
        serviceImplPath = "${dir.toString()}\\service\\impl",
        repPath = "${dir.toString()}\\dao",
        controllerPath = "${dir.toString()}\\controller",
        constantsPath = "${dir.toString()}\\constants",
        configPath = "${dir.toString()}\\config"

    mkdirs([entityPath, servicePath, serviceImplPath, repPath, controllerPath, constantsPath, configPath])

    System.out.println(table.getName())
    def entityName = javaName(table.getName(), true)
    def fields = calcFields(table)
    def basePackage = clacBasePackage(dir)

    if (isGenerate("Entity")) {
        genUTF8FileEntity(entityPath, "${entityName}.java").withPrintWriter { out -> genEntity(out, table, entityName, fields, basePackage) }
    }
    if (isGenerate("Service")) {
        // genUTF8FileOtherEntity(servicePath, "${entityName}Service.java").withPrintWriter { out -> genService(out, table, entityName, fields, basePackage) }
    }
    if (is
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wsdhla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值