IDEA JPA 視圖生成實(shí)體類(lèi) groovy 腳本

IDEA JPA 視圖生成實(shí)體類(lèi) groovy 腳本

注:部分代碼來(lái)源于互聯(lián)網(wǎng)

生成實(shí)體類(lèi)(部分)

package C:.Users.Mxnter.Desktop;

import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.Id;

/**
 * @Description  
 * @Author IDEA Auto JPA database tables generate entity Script Mxnter
 * @Date 2019-07-10 
 */


@Entity
@Table ( name ="MG_VIEW_DEC_RECEIVABLES" )
@Data
public class MgViewDecReceivables implements Serializable {


    private static final long serialVersionUID =  8044993785748313550L;
    
    @Id
    @Column(name = "UUID" ) 
    private String uuid;
    
    @Column(name = "COST_NAME" )    
    private String costName;
    
    @Column(name = "APPLY_ID" ) 
    private String applyId;

Generate VIEWs.groovy

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<DasObject>
 *   PROJECT     project
 *   FILES       files helper
 */

packageName = "com.sample;"
typeMapping = [
  (~/(?i)int/)                      : "long",
  (~/(?i)float|double|decimal|real/): "double",
  (~/(?i)datetime|timestamp/)       : "java.sql.Timestamp",
  (~/(?i)date/)                     : "java.sql.Date",
  (~/(?i)time/)                     : "java.sql.Time",
  (~/(?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)
  packageName = getPackageName(dir)
  def fields = calcFields(table)
  new File(dir, className + ".java").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 lombok.Data;"
  out.println "import javax.persistence.Column;"
  out.println "import javax.persistence.Entity;"
  out.println "import javax.persistence.Table;"
  out.println "import java.io.Serializable;"
  out.println "import javax.persistence.Id;"
  out.println ""
  out.println "/**\n" +
          " * @Description  \n" +
          " * @Author IDEA Auto JPA database view generate entity Script Mxnter\n" +
          " * @Date "+ new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + " \n" +
          " */"
  out.println ""
  out.println ""

  out.println "@Entity"
  out.println "@Table ( name =\""+table.getName() +"\" )"
  out.println "@Data"
  out.println "public class $className implements Serializable {"
  out.println ""
  out.println ""
  out.println genSerialID()
  fields.each() {
    out.println "\t"
    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 "${it.annos}\t"
    out.println "\tprivate ${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 += [[
                 colName : col.getName(),
                 name : javaName(col.getName(), false),
                 type : typeStr,
                 commoent: col.getComment(),
                 annos: ("UUID".equals(col.getName())?"\t@Id\n":"")+"\t@Column(name = \""+col.getName()+"\" )"]]
  }
}

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 genSerialID()
{
  return "\tprivate static final long serialVersionUID =  "+Math.abs(new Random().nextLong())+"L;"
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泥彤,一起剝皮案震驚了整個(gè)濱河市锯厢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌昆咽,老刑警劉巖办悟,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尘奏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡病蛉,警方通過(guò)查閱死者的電腦和手機(jī)炫加,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)铺然,“玉大人俗孝,你說(shuō)我怎么就攤上這事√饺郏” “怎么了驹针?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)诀艰。 經(jīng)常有香客問(wèn)我柬甥,道長(zhǎng),這世上最難降的妖魔是什么其垄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任苛蒲,我火速辦了婚禮,結(jié)果婚禮上绿满,老公的妹妹穿的比我還像新娘臂外。我一直安慰自己,他們只是感情好喇颁,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布漏健。 她就那樣靜靜地躺著,像睡著了一般橘霎。 火紅的嫁衣襯著肌膚如雪蔫浆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天姐叁,我揣著相機(jī)與錄音瓦盛,去河邊找鬼洗显。 笑死,一個(gè)胖子當(dāng)著我的面吹牛原环,可吹牛的內(nèi)容都是我干的挠唆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼嘱吗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼玄组!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起柜与,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤巧勤,失蹤者是張志新(化名)和其女友劉穎嵌灰,沒(méi)想到半個(gè)月后弄匕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沽瞭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年迁匠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驹溃。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡城丧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出豌鹤,到底是詐尸還是另有隱情亡哄,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布布疙,位于F島的核電站蚊惯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏灵临。R本人自食惡果不足惜截型,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望儒溉。 院中可真熱鬧宦焦,春花似錦、人聲如沸顿涣。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)涛碑。三九已至精堕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锌唾,已是汗流浹背锄码。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工夺英, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人滋捶。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓痛悯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親重窟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子载萌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容