IDEA上自动生成实体类带注解配置

import com.intellij.database.model.DasTable

import com.intellij.database.util.Case

import com.intellij.database.util.DasUtil

import java.text.SimpleDateFormat

/*

* Available context bindings:

* SELECTION Iterable

* PROJECT project

* FILES files helper

*/

packageName = "com.flower8.model;"

typeMapping = [

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

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

(~/(?i)datetime|timestamp|time/) : "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 className = javaName(table.getName(), true).substring(2)

def fields = calcFields(table)

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

printWriter.withPrintWriter {out -> generate(out, className, fields,table)}

}

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

out.println "package $packageName"

out.println "import lombok.Data;"

Set types = new HashSet()

String comm = "";

fields.each() {

types.add(it.type)

String str = it.tableCommoent.toString()

comm = str.substring(0,str.length()-1) +new String("的实体类".getBytes("gbk"),"utf-8")

}

if (types.contains("Date")) {

out.println "import java.util.Date;"

}

out.println "/**\n" +

" * @Description $comm \n" +

" * @Author tanglin\n" +

" * @Date "+ new SimpleDateFormat("yyyy/MM/dd HH:mm").format(new Date()) + " \n" +

" * @Version 1.0.0\n" +

" */"

out.println ""

out.println "@Data"

out.println "public class $className extends BaseEntity{"

out.println ""

fields.each() {

if(it.name != "id" && it.name != "createTime" && it.name != "modifyTime"){

if (isNotEmpty(it.commoent)) out.println " //${it.commoent.toString()}"

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

}

}

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),

colName : col.getName(),

type : typeStr,

commoent: col.getComment(),

tableCommoent: table.getComment(),

annos: ""]]

}

}

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tanglin423

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值