zoukankan      html  css  js  c++  java
  • IDEA Generate pojo(data first)基于 spring data jpa

    基于 idea 的 pojo生成

    右侧菜单栏 Database->New( + 图标)->Data source-> mysql(根据自己的数据源选择)

     

     使用:

    代码如下: POJOs.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

    /*
    * Available context bindings:
    * SELECTION Iterable<DasObject>
    * PROJECT project
    * FILES files helper
    */

    packageName = "com.sephiroth.jpademo.entity;"
    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 && it.getKind() == ObjectKind.TABLE }.each { generate(it, dir) }
    }

    def generate(table, dir) {
    def className = javaName(table.getName(), true)
    def fields = calcFields(table)
    new File(dir, "E_"+className + ".java").withPrintWriter { out -> generate(out, className, fields,table.getName()) }
    }

    def generate(out, className, fields ,tablename) {
    out.println "package $packageName"
    out.println ""
    out.println ""
    // 引用映射
    out.println "import org.hibernate.annotations.GenericGenerator;"
    out.println ""
    out.println "import javax.persistence.*;"
    out.println "import java.io.Serializable;"
    // jpa映射
    out.println "@Entity"
    out.println "@Table(name = "$tablename")"
    // jpa映射end
    out.println "public class E_$className implements Serializable {"
    out.println ""
    fields.each() {
    if (it.annos != "") out.println " ${it.annos}"
    // 列映射
    // 主键映射
    if (it.name == "id" && it.type == "String") {
    out.println """ @GenericGenerator(name = "user-uuid", strategy = "uuid")
    @GeneratedValue(generator = "user-uuid")
    @Column(name = "id", nullable = false, length = 64)"""
    }
    else if(it.name == "id") {
    out.println """ @GeneratedValue
    @Column(name = "$it.colname")"""
    }
    else {
    out.println " @Column(name = "$it.colname")"
    }
    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),
    colname : col.getName(),
    type : typeStr,
    annos: """
    /**
    * $col.comment
    */"""]]
    }
    }

    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]
    }
  • 相关阅读:
    开发网站邮件发送模块
    HttpModule的Init事件
    一个产品留言统计查寻的分析比较
    Js中清空文件上传字段(input type=file )
    Asp.net生成Excel报表
    jQuery与开发的相关js文件包含顺序
    trycatch 与 Response.End()
    asp.net2.0中的Usercontrol动态创建
    客户javascript端验证图片文件大小与规格使用Image对象
    JQuery 常用代码收集
  • 原文地址:https://www.cnblogs.com/sephiroth-wzc/p/8417187.html
Copyright © 2011-2022 走看看