zoukankan      html  css  js  c++  java
  • idea 根据表 生成实体类 groove 脚本版

    # 生成的实体类 ,类名大写,属性没有进行 下划线转大写操作

    import com.intellij.database.model.DasTable
    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.cjy.datacenter.entity;"
    typeMapping = [
            (~/(?i)bigint/)                   : "Long",
            (~/(?i)int/)                      : "Integer",
            (~/(?i)float|double|decimal|real/): "Double",
            (~/(?i)datetime|timestamp/)       : "java.util.Date",
            (~/(?i)time/)                     : "java.util.Date",
            (~/(?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)
      def fields = calcFields(table)
      new PrintWriter(new OutputStreamWriter(new FileOutputStream( new File(dir, className + ".java")), "utf-8")).withPrintWriter { out -> generate(out, className, fields) }
    }
    
    
    def generate(out, className, fields) {
      out.println "package $packageName"
      out.print "import lombok.Data; "
      out.println ""
      out.println ""
    
      out.println "@Data"
      out.println "public class $className {"
      out.println ""
      fields.each() {
    
        if (isNotEmpty(it.commoent)) {
          out.println "	/**"
          out.println "	 * ${it.commoent}"
          out.println "	 */"
        }
    
    
        if (it.annos != "") out.println "  ${it.annos}"
        out.println "  private ${it.type} ${it.name};"
      }
      out.println ""
      // 注释掉 set get 方法
      /*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    : fieldName(col.getName()),
                           type    : typeStr,
                           commoent: col.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]
      return s
    }
    
    def fieldName(str){
      return str
    }
    
    def isNotEmpty(content) {
      return content != null && content.toString().trim().length() > 0
    }
  • 相关阅读:
    [Vim].vimrc
    [笔试面试][code_by_hand]压缩字符串
    [笔试面试][code_by_hand]输出第二个字符串在第一个字符串中的连接次序
    [笔试面试]串s1="ABCDACDAE" s2="DAE" 找出s1中,包含s2的最小子串,要求该子串含有s2中的所有字符,串内字符无顺序关系
    [笔试面试][code_by_hand]从二元树中找出和为某一值的所有路径
    DEV 皮肤的使用
    Dev GridControl使用小结
    [转载]DEV控件:gridControl常用属性设置
    C#网页 自动登录 提交POST信息 方法
    比较字符串NSString
  • 原文地址:https://www.cnblogs.com/whm-blog/p/12206662.html
Copyright © 2011-2022 走看看