• 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
    }
  • 相关阅读:
    架构漫谈阅读笔记
    《七步掌握业务分析》读书笔记六
    《七步掌握业务分析》读书笔记五
    《七步掌握业务分析》读书笔记四
    使用JSON Web Token完成用户认证(REST framework JWT Auth)
    APIView与GenericAPIView
    支付宝支付
    视频托管和插入广告
    redis淘汰机制
    redis五种数据结构和应用场景
  • 原文地址:https://www.cnblogs.com/whm-blog/p/12206662.html
Copyright © 2020-2023  润新知