zoukankan      html  css  js  c++  java
  • idea生成实体类

    1、点击View->Tool Windows->Database

    2、点击Datebase框的加号,DateSource,选择对应的数据源,配置对应信息,点击Test Connection测试连通性

    3、配置完成数据源后,选择需要生成实体的表,右键选择Script Extensions,Go To Script Directory,把脚本文件(GenerateMyPOJOs.groovy)放到Script目类

    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
     */
    
    typeMapping = [
            (~/(?i)number(d)/)              : "int",
            (~/(?i)number/)              : "double",
            (~/(?i)int/)                      : "int",
            (~/(?i)long/)                      : "long",
            (~/(?i)float|double|decimal|real/): "double",
            (~/(?i)timestamp|datetime|date|time/)              : "LocalDateTime",
            (~/(?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)
        def file = new File(dir,className+".java")
        def packageName = dir.toString().replaceAll("\\", ".").replaceAll("^.*src(\.main\.java\.)?", "") + ";"
        def writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8"))
    
        writer.withPrintWriter { out -> generate(out, table, fields, packageName) }
    }
    
    def generate(out, table, fields, packageName) {
        def tableName = table.getName()
        def className = javaName(tableName, true)
        def tableComment = table.getComment()
        def hasPK = DasUtil.getPrimaryKey(table)!=null
        def hasDatetime = false
        fields.each() {hasDatetime=hasDatetime||it.type=="LocalDateTime"}
    
        out.println "package $packageName"
        out.println ""
        out.println "import javax.persistence.*;"
        if (hasPK) out.println "import java.time.LocalDateTime;"
        out.println "import org.hibernate.annotations.GenericGenerator;"
        out.println ""
        if (tableComment != "" && tableComment != null){
            out.println "/**"
            out.println " * ${tableComment}"
            out.println " */"
        }
        if (hasPK) out.println "@Entity"
        out.println "@Table(name = "${tableName}")"
        out.println "public class $className {"
        out.println ""
        fields.each() {
            out.println "    //${it.commoent} ${it.spec}"
            out.println "    private ${it.type} ${it.name};"
            out.println ""
        }
        fields.each() {
            out.println ""
            if (it.isId) out.println "    @Id"
            if (it.isId) out.println "    @GeneratedValue()"
            if (it.annos != "") out.println "    ${it.annos}"
            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) {
        def primaryKey = DasUtil.getPrimaryKey(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 colName = col.getName()
            fields += [[
                               name    : javaName(col.getName(), false),
                               type    : typeStr,
                               commoent: col.getComment(),
                               spec:spec,
                               isId    : primaryKey != null && DasUtil.containsName(colName, primaryKey.getColumnsRef()),
                               annos   : "@Column(name = "${colName}")",
                       ]]
        }
    }
    
    def javaName(str, capitalize) {
        def s = str.split(/(?<=[^p{IsLetter}])/).collect { Case.LOWER.apply(it).capitalize() }
                .join("").replaceAll(/[^p{javaJavaIdentifierPart}]/, "")
        .replaceAll("_", "")
        capitalize || s.length() == 1 ? s : Case.LOWER.apply(s[0]) + s[1..-1]
    }
    

      

    再次右键需要转换的表,Script Extensions,选择GenerateMyPOJOs.groovy,选择对应目录,即可生成实体类

    可以根据自己的需要修改groovy脚本,生成合适的实体类

  • 相关阅读:
    EJB Timer Service is not available. Timers for application with id 95795415990861824 will not be deleted
    MySql数据基本操作sql语句
    python 将字符串转换成字典dict的各种方式总结
    Go语言笔记:struct结构遍历
    golang实现base64编解码
    map赋值前要先初始化:assignment to entry in nil map
    python中 .write 无法向文件写入内容
    python 守护进程
    go语言解析 map[string]interface{} 数据格式
    python虚拟环境--virtualenv
  • 原文地址:https://www.cnblogs.com/yytxdy/p/11453259.html
Copyright © 2011-2022 走看看