使用idea默认配置生成Entity
1、在视图中找到数据库配置,连上数据源;
2、找到需要生成实体类的表,右键选项:Scripted Extensions,IDEA默认脚本为Generate POJOs.groovy,点此选项;
3、在弹出框选择实体类要放置的位置,确认后生成文件;
自定义配置生成Entity
从生成的实体类可以看出并不能满足我们的需求,当字段过多时,自己添加注释注解会浪费大量时间;所以我们可以自定义脚本实现需求;
1、还是在表格右键选项:Scripted Extensions中选择:Go to scripts Directory,进入脚本所在路径;
2、在schema包下,新建脚本文件,自定义命名为:mypojos.groovy
3、mypojos.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
.io
.*
import java
.text
.SimpleDateFormat
packageName
= ""
typeMapping
= [
(~/(?i)tinyint|smallint|mediumint/) : "Integer",
(~/(?i)int/) : "Long",
(~/(?i)bool|bit/) : "Boolean",
(~/(?i)float|double|decimal|real/) : "Double",
(~/(?i)datetime|timestamp|date|time/) : "Date",
(~/(?i)blob|binary|bfile|clob|raw|image/): "InputStream",
(~/(?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 className
= javaClassName(table
.getName(), true)
def fields
= calcFields(table
)
packageName
= getPackageName(dir
)
PrintWriter printWriter
= new PrintWriter(new OutputStreamWriter(new FileOutputStream(new File(dir
, className
+ ".java")), "UTF-8"))
printWriter
.withPrintWriter
{out
-> generate(out
, className
, fields
,table
)}
}
def getPackageName(dir
) {
return dir
.toString().replaceAll("\\\\", ".").replaceAll("/", ".").replaceAll("^.*src(\\.main\\.java\\.)?", "") + ";"
}
def generate(out
, className
, fields
,table
) {
out
.println
"package $packageName"
out
.println
""
out
.println
"import javax.persistence.Column;"
out
.println
"import javax.persistence.Entity;"
out
.println
"import javax.persistence.Table;"
out
.println
"import java.io.Serializable;"
Set types
= new HashSet()
fields
.each() {
types
.add(it
.type
)
}
if (types
.contains("Date")) {
out
.println
"import java.util.Date;"
}
if (types
.contains("InputStream")) {
out
.println
"import java.io.InputStream;"
}
out
.println
""
out
.println
"/**\n" +
" * @Description \n" +
" * @Author \n" +
" * @Date "+ new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + " \n" +
" */"
out
.println
""
out
.println
"@Entity"
out
.println
"@Table ( name =\""+table
.getName() +"\" )"
out
.println
"public class $className implements Serializable {"
out
.println
""
out
.println
genSerialID()
fields
.each() {
out
.println
""
if (isNotEmpty(it
.commoent
)) {
out
.println
"\t/**"
out
.println
"\t * ${it.commoent.toString()}"
out
.println
"\t */"
}
if (it
.annos
!= "") out
.println
" ${it.annos.replace("[@Id]", "")}"
out
.println
"\tprivate ${it.type} ${it.name};"
}
fields
.each() {
out
.println
""
out
.println
"\tpublic ${it.type} get${it.name.capitalize()}() {"
out
.println
"\t\treturn this.${it.name};"
out
.println
"\t}"
out
.println
""
out
.println
"\tpublic void set${it.name.capitalize()}(${it.type} ${it.name}) {"
out
.println
"\t\tthis.${it.name} = ${it.name};"
out
.println
"\t}"
}
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
def comm
=[
colName
: col
.getName(),
name
: javaName(col
.getName(), false),
type
: typeStr
,
commoent
: col
.getComment(),
annos
: "\t@Column(name = \""+col
.getName()+"\" )"]
if("id".equals(Case
.LOWER
.apply(col
.getName())))
comm
.annos
+=["@Id"]
fields
+= [comm
]
}
}
def javaClassName(str
, capitalize
) {
def s
= com
.intellij
.psi
.codeStyle
.NameUtil
.splitNameIntoWords(str
)
.collect
{ Case
.LOWER
.apply(it
).capitalize() }
.join("")
.replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_")
s
= s
[1..s
.size() - 1]
capitalize
|| s
.length() == 1? s
: Case
.LOWER
.apply(s
[0]) + s
[1..-1]
}
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
}
static String
changeStyle(String str
, boolean toCamel
){
if(!str
|| str
.size() <= 1)
return str
if(toCamel
){
String r
= str
.toLowerCase().split('_').collect
{cc
-> Case
.LOWER
.apply(cc
).capitalize()}.join('')
return r
[0].toLowerCase() + r
[1..-1]
}else{
str
= str
[0].toLowerCase() + str
[1..-1]
return str
.collect
{cc
-> ((char)cc
).isUpperCase() ? '_' + cc
.toLowerCase() : cc
}.join('')
}
}
static String
genSerialID()
{
return "\tprivate static final long serialVersionUID = 1L;"
}
4、再次生成文件,即可得到我们需要的 带注释注解的实体类;
5、如有其他需求,可在自定义脚本中自行修改;
转载请注明原文地址: https://lol.8miu.com/read-31895.html