IDEA POJO開(kāi)發(fā)神器之Groovy的使用詳解
暫時(shí)只對(duì) MySQL進(jìn)行了測(cè)試
項(xiàng)目使用 Lombok MyBatis-Plus
一:使用步驟首先在項(xiàng)目右側(cè)找到 DataBase 如圖 沒(méi)有請(qǐng)參考 idea中database不顯示問(wèn)題

2.點(diǎn)開(kāi)之后進(jìn)行數(shù)據(jù)庫(kù)連接(注意沒(méi)有驅(qū)動(dòng)的請(qǐng)下載相關(guān)數(shù)據(jù)庫(kù)驅(qū)動(dòng))具體步驟如圖

點(diǎn)開(kāi) + 號(hào)

選擇Date Source

找到相應(yīng)的數(shù)據(jù)庫(kù) 這里我使用的是 mysql

如果沒(méi)有 Dirver 請(qǐng)下載 idea 會(huì)在窗口左下角給提示(這里具體在什么位置我也記不清楚)輸入相關(guān)連接信息

過(guò)程中出現(xiàn)任何問(wèn)題,請(qǐng)?jiān)诹粞詤^(qū)留言(萌新基本全天在線)連接上之后如果沒(méi)有需要的數(shù)據(jù)可以點(diǎn)擊如下圖方式


先設(shè)置groovy

替換(有些地方需要注意,具體看下方源碼)
import com.intellij.database.model.DasTable
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil
import java.time.LocalDate
/*
* Available context bindings:
* SELECTION Iterable<DasObject>
* PROJECT project
* FILES files helper
*/
// 此處指定包路徑,路徑需要自行維護(hù);
packageName = "com.qgy.web.entity;"
// 此處指定對(duì)應(yīng)的類型映射,可按需修改,目前tinyint如果要映射到自定義枚舉類型,只能手動(dòng)修改
typeMapping = [
(~/(?i)bigint/) : "Long",
(~/(?i)int/) : "Integer",
(~/(?i)tinyint/) : "Boolean",
(~/(?i)float|double|decimal|real/): "BigDecimal",
(~/(?i)time|datetime|timestamp/) : "LocalDateTime",
(~/(?i)date/) : "LocalDate",
(~/(?i)/) : "String"
]
// 上面用到類和它的導(dǎo)入路徑的之間的映射
importMap = [
"BigDecimal" : "java.math.BigDecimal",
"LocalDate" : "java.time.LocalDate",
"LocalDateTime": "java.time.LocalDateTime",
]
// 導(dǎo)入路徑列表,下面引用的時(shí)候會(huì)去重,也可以直接聲明成一個(gè) HashSet
importList = []
// 彈出選擇文件的對(duì)話框
FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir ->
SELECTION.filter { it instanceof DasTable }.each { generate(it, dir) }
}
def generate(table, dir) {
def className = javaName(table.getName(), true) + "Entity"
def fields = calcFields(table)
new PrintWriter(new OutputStreamWriter(new FileOutputStream(new File(dir, className + ".java")), "utf-8")).withPrintWriter { out -> generate(out, className, fields, table) }
}
// 從這里開(kāi)始,拼實(shí)體類的具體邏輯代碼
def generate(out, className, fields, table) {
out.println "package $packageName"
out.println ""
// 引入所需的包
out.println "import lombok.Data;"
out.println "import lombok.EqualsAndHashCode;"
out.println "import lombok.experimental.Accessors;"
out.println "import com.baomidou.mybatisplus.annotation.*;"
out.println "import java.io.Serializable;"
// 去重后導(dǎo)入列表
importList.unique().each() { pkg ->
out.println "import " + pkg + ";"
}
out.println ""
// 添加類注釋
out.println "/**"
// 如果添加了表注釋,會(huì)加到類注釋上
if (isNotEmpty(table.getComment())) {
out.println " * " + table.getComment()
}
out.println " *"
out.println " * @author 輸入作者"
out.println " * @date " + LocalDate.now()
out.println " */"
// 添加類注解
out.println "@Data"
out.println "@EqualsAndHashCode(callSuper = false)"
out.println "@Accessors(chain = true)"
out.println "@TableName(\"${table.getName()}\")"
out.println "public class $className implements Serializable {"
out.println ""
out.println genSerialID()
boolean isId = true
// 遍歷字段,按下面的規(guī)則生成
fields.each() {
// 輸出注釋
if (isNotEmpty(it.comment)) {
out.println "\t/**"
out.println "\t * ${it.comment}"
out.println "\t */"
}
// 這邊默認(rèn)第一個(gè)字段為主鍵,實(shí)際情況大多數(shù)如此,遇到特殊情況可能需要手動(dòng)修改
if (isId) {
out.println "\t@TableId(type = IdType.AUTO)"
isId = false
}
if ((it.annos + "").indexOf("[@Id]") >= 0) out.println "\t@Id"
if (it.annos != "") out.println " ${it.annos.replace("[@Id]", "")}"
out.println "\tprivate ${it.type} ${it.name};"
out.println ""
}
out.println ""
out.println "}"
}
def calcFields(table) {
DasUtil.getColumns(table).reduce([]) { fields, col ->
def spec = Case.LOWER.apply(col.getDataType().getSpecification())
def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.value
if (importMap.containsKey(typeStr)) {
importList.add(importMap.get(typeStr))
}
fields += [[
name : javaName(col.getName(), false),
type : typeStr,
comment: col.getComment(),
annos : "\t@TableField(\"" + col.getName() + "\" )"
]]
}
}
def isNotEmpty(content) {
return content != null && content.toString().trim().length() > 0
}
def javaName(str, capitalize) {
def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
.collect { Case.LOWER.apply(it).capitalize() }
.join("")
.replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_")
capitalize || s.length() == 1 ? s : Case.LOWER.apply(s[0]) + s[1..-1]
}
static String genSerialID() {
return "\tprivate static final long serialVersionUID = " + Math.abs(new Random().nextLong()) + "L;"
}
選中需要的數(shù)據(jù)庫(kù),找到需要生成實(shí)體類的表這里我就隨便選擇一個(gè)。右鍵選擇

在左側(cè)列表找到文件名之后點(diǎn)擊會(huì)有彈窗選擇你要存放的地方點(diǎn)擊🆗就行了,效果如下
package com.qgy.web.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 超級(jí)管理員賬號(hào)信息表
*
* @author rog
* @date 2020-07-20
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sys_super")
public class SysSuperEntity implements Serializable {
private static final long serialVersionUID = 5132404354445122973L;
/**
* 主鍵id標(biāo)識(shí)
*/
@TableId(type = IdType.AUTO)
@TableField("id" )
private Integer id;
/**
* 管理員id唯一標(biāo)識(shí)
*/
@TableField("account_id" )
private String accountId;
/**
* 管理員賬號(hào)
*/
@TableField("account" )
private String account;
/**
* 管理員密碼
*/
@TableField("account_password" )
private String accountPassword;
/**
* 上一次登錄ip
*/
@TableField("account_ip_last" )
private String accountIpLast;
/**
* 當(dāng)前登錄ip
*/
@TableField("account_ip_now" )
private String accountIpNow;
/**
* 最近一次登錄時(shí)間
*/
@TableField("login_time" )
private LocalDateTime loginTime;
/**
* 是否啟用
*/
@TableField("isEnable" )
private Integer isEnable;
}
到此這篇關(guān)于IDEA POJO開(kāi)發(fā)神器之Groovy的使用的文章就介紹到這了,更多相關(guān)IDEA POJO Groovy內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java GUI實(shí)現(xiàn)學(xué)生圖書管理簡(jiǎn)單實(shí)例
這篇文章主要為大家詳細(xì)介紹了java GUI實(shí)現(xiàn)學(xué)生圖書管理簡(jiǎn)單示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
詳解SpringBoot程序啟動(dòng)時(shí)執(zhí)行初始化代碼
這篇文章主要介紹了詳解SpringBoot程序啟動(dòng)時(shí)執(zhí)行初始化代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
如何剔除eureka無(wú)效和down狀態(tài)的問(wèn)題
這篇文章主要介紹了如何剔除eureka無(wú)效和down狀態(tài)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
java實(shí)現(xiàn)獲取安卓設(shè)備里已安裝的軟件包
本文給大家介紹的是如何獲取設(shè)備中已經(jīng)安裝的應(yīng)用軟件包的代碼,其核心方法原理很簡(jiǎn)單,我們通過(guò)Android中提供的PackageManager類,來(lái)獲取手機(jī)中安裝的應(yīng)用程序信息2015-10-10
Spring Boot詳解創(chuàng)建和運(yùn)行基礎(chǔ)流程
這篇文章主要介紹了SpringBoot創(chuàng)建和運(yùn)行的基礎(chǔ)流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
java導(dǎo)出excel 瀏覽器直接下載或者或以文件形式導(dǎo)出
這篇文章主要介紹了java導(dǎo)出excel 瀏覽器直接下載或者或以文件形式導(dǎo)出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
詳解Maven 搭建spring boot多模塊項(xiàng)目(附源碼)
這篇文章主要介紹了詳解Maven 搭建spring boot多模塊項(xiàng)目(附源碼),具有一定的參考價(jià)值,有興趣的可以了解一下2017-09-09

