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

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

點開 + 號

選擇Date Source

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

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

過程中出現(xiàn)任何問題,請在留言區(qū)留言(萌新基本全天在線)連接上之后如果沒有需要的數(shù)據(jù)可以點擊如下圖方式


先設(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;"
// 此處指定對應(yīng)的類型映射,可按需修改,目前tinyint如果要映射到自定義枚舉類型,只能手動修改
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)入路徑列表,下面引用的時候會去重,也可以直接聲明成一個 HashSet
importList = []
// 彈出選擇文件的對話框
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) }
}
// 從這里開始,拼實體類的具體邏輯代碼
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 "/**"
// 如果添加了表注釋,會加到類注釋上
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)第一個字段為主鍵,實際情況大多數(shù)如此,遇到特殊情況可能需要手動修改
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ù)庫,找到需要生成實體類的表這里我就隨便選擇一個。右鍵選擇

在左側(cè)列表找到文件名之后點擊會有彈窗選擇你要存放的地方點擊🆗就行了,效果如下
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;
/**
* 超級管理員賬號信息表
*
* @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)識
*/
@TableId(type = IdType.AUTO)
@TableField("id" )
private Integer id;
/**
* 管理員id唯一標(biāo)識
*/
@TableField("account_id" )
private String accountId;
/**
* 管理員賬號
*/
@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;
/**
* 最近一次登錄時間
*/
@TableField("login_time" )
private LocalDateTime loginTime;
/**
* 是否啟用
*/
@TableField("isEnable" )
private Integer isEnable;
}
到此這篇關(guān)于IDEA POJO開發(fā)神器之Groovy的使用的文章就介紹到這了,更多相關(guān)IDEA POJO Groovy內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java GUI實現(xiàn)學(xué)生圖書管理簡單實例
這篇文章主要為大家詳細(xì)介紹了java GUI實現(xiàn)學(xué)生圖書管理簡單示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
java實現(xiàn)獲取安卓設(shè)備里已安裝的軟件包
本文給大家介紹的是如何獲取設(shè)備中已經(jīng)安裝的應(yīng)用軟件包的代碼,其核心方法原理很簡單,我們通過Android中提供的PackageManager類,來獲取手機(jī)中安裝的應(yīng)用程序信息2015-10-10
Spring Boot詳解創(chuàng)建和運行基礎(chǔ)流程
這篇文章主要介紹了SpringBoot創(chuàng)建和運行的基礎(chǔ)流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
java導(dǎo)出excel 瀏覽器直接下載或者或以文件形式導(dǎo)出
這篇文章主要介紹了java導(dǎo)出excel 瀏覽器直接下載或者或以文件形式導(dǎo)出方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
詳解Maven 搭建spring boot多模塊項目(附源碼)
這篇文章主要介紹了詳解Maven 搭建spring boot多模塊項目(附源碼),具有一定的參考價值,有興趣的可以了解一下2017-09-09

