添加里面的内容
- 修改idea为自己名字 的地方可以修改作者名字为自己的
- schema = \"后面添加自己的表空间名称(mysql可以不添加, 不用这个schema属性也行) 这里可以根据提示修改
importcom.intellij.database.model.DasTable
importcom.intellij.database.model.ObjectKind
importcom.intellij.database.util.Case
importcom.intellij.database.util.DasUtil
importjava.text.SimpleDateFormat
/*
*Availablecontextbindings:
*SELECTIONIterable<DasObject>
*PROJECTproject
*FILESfileshelper
*/
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("Choosedirectory","Choosewheretostoregeneratedfiles"){dir->
SELECTION.filter{itinstanceofDasTable&&it.getKind()==ObjectKind.TABLE}.each{generate(it,dir)}
}
defgenerate(table,dir){
defclassName=javaName(table.getName(),true)
deffields=calcFields(table)
packageName=getPackageName(dir)
PrintWriterprintWriter=newPrintWriter(newOutputStreamWriter(newFileOutputStream(newFile(dir,className ".java")),"UTF-8"))
printWriter.withPrintWriter{out->generate(out,className,fields,table)}
//newFile(dir,className ".java").withPrintWriter{out->generate(out,className,fields,table)}
}
//获取包所在文件夹路径
defgetPackageName(dir){
returndir.toString().replaceAll("\\\\",".").replaceAll("/",".").replaceAll("^.*src(\\.main\\.java\\.)?","") ";"
}
defgenerate(out,className,fields,table){
out.println"package$packageName"
out.println""
out.println"importjavax.persistence.Column;"
out.println"importjavax.persistence.Entity;"
out.println"importjavax.persistence.Table;"
out.println"importjavax.persistence.Id;"
out.println"importjavax.persistence.GeneratedValue;"
out.println"importjava.io.Serializable;"
Settypes=newHashSet()
fields.each(){
types.add(it.type)
}
if(types.contains("Date")){
out.println"importjava.util.Date;"
}
if(types.contains("InputStream")){
out.println"importjava.io.InputStream;"
}
out.println""
out.println"/**\n"
"*@Description\n"
"*@Authoridea\n" //1.修改idea为自己名字
"*@Date" newSimpleDateFormat("yyyy-MM-dd").format(newDate()) "\n"
"*/"
out.println""
out.println"@Entity"
out.println"@Table(name=\"" table.getName() "\",schema=\"\")"//2.schema=\"后面添加自己的表空间名称(mysql可以不添加,不用这个schema属性也行)
out.println"publicclass$classNameimplementsSerializable{"
out.println""
out.printlngenSerialID()
fields.each(){
out.println""
//输出注释
if(isNotEmpty(it.commoent)){
out.println"\t/**"
out.println"\t*${it.commoent.toString()}"
out.println"\t*/"
}
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};"
}
//输出get/set方法
fields.each(){
out.println""
out.println"\tpublic${it.type}get${it.name.capitalize()}(){"
out.println"\t\treturnthis.${it.name};"
out.println"\t}"
out.println""
out.println"\tpublicvoidset${it.name.capitalize()}(${it.type}${it.name}){"
out.println"\t\tthis.${it.name}=${it.name};"
out.println"\t}"
}
//输出toString方法
out.println""
out.println"\t@Override"
out.println"\tpublicStringtoString(){"
out.println"\t\treturn\"TpApiConfig{\" "
fields.each(){
out.println"\t\t\t\t\"${it.name}='\" ${it.name} '\\'' "
}
out.println"\t\t\t\t'}';"
out.println"\t}"
out.println""
out.println"}"
}
defcalcFields(table){
DasUtil.getColumns(table).reduce([]){fields,col->
defspec=Case.LOWER.apply(col.getDataType().getSpecification())
deftypeStr=typeMapping.find{p,t->p.matcher(spec).find()}.value
defcomm=[
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]
}
}
//已经修改为使用javaName,如果有需要可以在defclassName=javaName(table.getName(),true)中修改为javaClassName
//处理类名(这里是因为我的表都是以t_命名的,所以需要处理去掉生成类名时的开头的T,
//如果你不需要那么请查找用到了javaClassName这个方法的地方修改为javaName即可)
defjavaClassName(str,capitalize){
defs=com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
.collect{Case.LOWER.apply(it).capitalize()}
.join("")
.replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/,"_")
//去除开头的Thttp://developer.51cto.com/art/200906/129168.htm
s=s[1..s.size()-1]
capitalize||s.length()==1?s:Case.LOWER.apply(s[0]) s[1..-1]
}
defjavaName(str,capitalize){
//defs=str.split(/(?<=[^\p{IsLetter}])/).collect{Case.LOWER.apply(it).capitalize()}
//.join("").replaceAll(/[^\p{javaJavaIdentifierPart}]/,"_")
//capitalize||s.length()==1?s:Case.LOWER.apply(s[0]) s[1..-1]
defs=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]
}
defisNotEmpty(content){
returncontent!=null&&content.toString().trim().length()>0
}
staticStringchangeStyle(Stringstr,booleantoCamel){
if(!str||str.size()<=1)
returnstr
if(toCamel){
Stringr=str.toLowerCase().split('_').collect{cc->Case.LOWER.apply(cc).capitalize()}.join('')
returnr[0].toLowerCase() r[1..-1]
}else{
str=str[0].toLowerCase() str[1..-1]
returnstr.collect{cc->((char)cc).isUpperCase()?'_' cc.toLowerCase():cc}.join('')
}
}
staticStringgenSerialID(){
return"\tprivatestaticfinallongserialVersionUID=" Math.abs(newRandom().nextLong()) "L;"
}
表上右键, 选择自己写的脚本生成实体类
效果如下: