一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - IDEA POJO開發神器之Groovy的使用詳解

IDEA POJO開發神器之Groovy的使用詳解

2020-08-01 00:26熊本一郎 Java教程

這篇文章主要介紹了IDEA POJO開發神器之Groovy的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

暫時只對 MySQL進行了測試

項目使用 Lombok MyBatis-Plus

一:使用步驟首先在項目右側找到 DataBase 如圖 沒有請參考 idea中database不顯示問題

IDEA POJO開發神器之Groovy的使用詳解

2.點開之后進行數據庫連接(注意沒有驅動的請下載相關數據庫驅動)具體步驟如圖

IDEA POJO開發神器之Groovy的使用詳解

點開 + 號

IDEA POJO開發神器之Groovy的使用詳解

選擇Date Source

IDEA POJO開發神器之Groovy的使用詳解

找到相應的數據庫 這里我使用的是 mysql

IDEA POJO開發神器之Groovy的使用詳解

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

IDEA POJO開發神器之Groovy的使用詳解

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

IDEA POJO開發神器之Groovy的使用詳解

IDEA POJO開發神器之Groovy的使用詳解

先設置groovy

IDEA POJO開發神器之Groovy的使用詳解

替換(有些地方需要注意,具體看下方源碼)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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
 */
 
// 此處指定包路徑,路徑需要自行維護;
packageName = "com.qgy.web.entity;"
// 此處指定對應的類型映射,可按需修改,目前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"
]
 
// 上面用到類和它的導入路徑的之間的映射
importMap = [
  "BigDecimal" : "java.math.BigDecimal",
  "LocalDate" : "java.time.LocalDate",
  "LocalDateTime": "java.time.LocalDateTime",
]
 
// 導入路徑列表,下面引用的時候會去重,也可以直接聲明成一個 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;"
 // 去重后導入列表
 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
 // 遍歷字段,按下面的規則生成
 fields.each() {
  // 輸出注釋
  if (isNotEmpty(it.comment)) {
   out.println "\t/**"
   out.println "\t * ${it.comment}"
   out.println "\t */"
  }
  // 這邊默認第一個字段為主鍵,實際情況大多數如此,遇到特殊情況可能需要手動修改
  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;"
}

選中需要的數據庫,找到需要生成實體類的表這里我就隨便選擇一個。右鍵選擇

IDEA POJO開發神器之Groovy的使用詳解

在左側列表找到文件名之后點擊會有彈窗選擇你要存放的地方點擊

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 无人区尖叫之夜美女姐姐视频 | 亚洲精品AV无码永久无码 | 青草视频免费观看 | 久青草国产观看在线视频 | 成人免费公开视频 | 久久精品嫩草影院免费看 | 日本高清免费观看 | 欧美三级做爰全过程 | 白白国产永久免费视频 | 农夫69小说恋老妇小说 | 精品一区二区三区高清免费观看 | porno中国xxxxx| 亚洲成人国产 | xxx86日本人 xxnx日本免费护士 | 国色天香社区在线视频免费观看 | 我们中文在线观看免费完整版 | 精品国产自在现线久久 | 骚虎最新网址 | 亚洲男gay同性同志 亚洲免费在线看 | 色婷婷天天综合在线 | 窝窝午夜理伦影院 | 免费一级欧美大片在线观看 | 欧美丝袜videohd| 国产精品va在线观看无 | 四虎国产免费 | 美女脱了内裤让男生玩屁股 | 69日本xxxhd | 国内精品在线观看视频 | 亚洲 在线 日韩 欧美 | 欧美高清videosex极品 | 精品国产在线观看 | 亚洲电影不卡 | 成年人视频在线免费观看 | 5g影院天天爽爽 | 免费观看无人区完整版 | 亚洲成年网站在线777 | 欧美日韩一二三区免费视频观看 | 欧美性受xxxx88喷潮 | 西野翔全部作品在线观看 | 亚洲国产区男人本色在线观看欧美 | 色多多幸福宝 |