IDEA连接数据库生成对应实体类(有字段注释)

编程

添加模板

import com.intellij.database.model.DasTable

import com.intellij.database.util.Case

import com.intellij.database.util.DasUtil

import java.io.*

import java.text.SimpleDateFormat

/*

* Available context bindings:

* SELECTION Iterable<DasObject>

* PROJECT project

* FILES files helper

*/

packageName = "com.jx.eat.domain;"

typeMapping = [

(~/(?i)int/) : "Long",

(~/(?i)float|double|decimal|real/): "Double",

(~/(?i)datetime|timestamp/) : "java.util.Date",

(~/(?i)date/) : "java.util.Date",

(~/(?i)time/) : "java.util.Date",

(~/(?i)/) : "String"

]

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 tableComment = getTableComment(table)

if (tableComment == null || "".equals(tableComment)) {

tableComment = ""

}

def className = javaName(table.getName(), true)

def fields = calcFields(table)

PrintWriter output = new PrintWriter(new OutputStreamWriter(new FileOutputStream(new File(dir, className + ".java")), "utf-8"))

output.withPrintWriter { out -> generate(out, className, fields, tableComment) }

}

def generate(out, className, fields, tableComment) {

out.println "package $packageName"

out.println "import java.io.Serializable;"

out.println ""

out.println ""

out.println "/**

" +

" * <p>

" +

" *

" +

" * <p>

" +

" *

" +

" * @author xuyu

" +

" * @desc " + tableComment + "

" +

" * @since: " + getNowDateYMS() + "

" +

" */"

out.println ""

out.println "public class $className implements Serializable{"

out.println ""

fields.each() {

if (isNotEmpty(it.commoent)) {

out.println " /**"

out.println " * ${it.commoent}"

out.println " */"

}

if (it.annos != "") out.println " ${it.annos}"

out.println " private ${it.type} ${it.name};"

}

out.println ""

fields.each() {

out.println ""

out.println " public ${it.type} get${it.name.capitalize()}() {"

out.println " return ${it.name};"

out.println " }"

out.println ""

out.println " public void set${it.name.capitalize()}(${it.type} ${it.name}) {"

out.println " this.${it.name} = ${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

fields += [[

name : javaName(col.getName(), false),

type : typeStr,

commoent: col.getComment(),

annos : ""]]

}

}

def getTableComment(table) {

return table.getComment();

}

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]

}

def isNotEmpty(content) {

return content != null && content.toString().trim().length() > 0

}

def getNowDateYMS() {

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd")// 设置日期格式

return df.format(new Date())

}

效果

以上是 IDEA连接数据库生成对应实体类(有字段注释) 的全部内容, 来源链接: utcz.com/z/511559.html

回到顶部