1,idea连接mysql数据库

IntelliJ IDEA 自定义 Generate POJOs.groovy 生成 POJO

 

 

2,右键数据库表格,打开代码生成器规则文件地址

IntelliJ IDEA 自定义 Generate POJOs.groovy 生成 POJO

 

 

 

3,在文件夹下新建新建MyGenerate POJOs.groovy

IntelliJ IDEA 自定义 Generate POJOs.groovy 生成 POJO 

 

 

4,自定义MyGenerate 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
import java.io.*
import java.text.SimpleDateFormat

/*
 * Available context bindings:
 *   SELECTION   Iterable<DasObject>
 *   PROJECT     project
 *   FILES       files helper
 */
packageName = "com.n22.cs.drp.model"
typeMapping = [
        (~/(?i)tinyint|smallint|mediumint/)      : "Integer",
        (~/(?i)int/)                             : "Long",
        (~/(?i)bool|bit/)                        : "Boolean",
        (~/(?i)float|double|decimal|real/)       : "Double",
        (~/(?i)datetime|timestamp|date|time/)    : "Date",
        (~/(?i)blob|binary|bfile|clob|raw|image/): "InputStream",
        (~/(?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)
  packageName = getPackageName(dir)
  PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(new File(dir, className + ".java")), "UTF-8"))
  printWriter.withPrintWriter {out -> generate(out, className, fields,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 javax.persistence.Column;"
  out.println "import javax.persistence.Entity;"
  out.println "import javax.persistence.Table;"
  out.println "import java.io.Serializable;"
  out.println "import lombok.Data;"
  out.println "import lombok.AllArgsConstructor;"
  out.println "import lombok.NoArgsConstructor;"
  Set types = new HashSet()

  fields.each() {
    types.add(it.type)
  }

  if (types.contains("Date")) {
    out.println "import java.util.Date;"
  }

  if (types.contains("InputStream")) {
    out.println "import java.io.InputStream;"
  }
  out.println ""
  out.println "/**\n" +
          " * @Description  \n" +
          " * @Author  zhulei\n" +
          " * @Date "+ new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + " \n" +
          " */"
  out.println ""
  out.println "@Data"
  out.println "@AllArgsConstructor"
  out.println "@NoArgsConstructor"
  out.println "@Entity"
  out.println "@Table ( name =\""+table.getName() +"\" )"
  out.println "public class $className  implements Serializable {"
  out.println ""
  out.println genSerialID()
  fields.each() {
    out.println ""
    // 输出注释
    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 "\tprivate ${it.type} ${it.name};"
  }

  // 输出get/set方法
//    fields.each() {
//        out.println ""
//        out.println "\tpublic ${it.type} get${it.name.capitalize()}() {"
//        out.println "\t\treturn this.${it.name};"
//        out.println "\t}"
//        out.println ""
//
//        out.println "\tpublic void set${it.name.capitalize()}(${it.type} ${it.name}) {"
//        out.println "\t\tthis.${it.name} = ${it.name};"
//        out.println "\t}"
//    }
  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
    def comm =[
            colName : col.getName(),
            name :  javaName(col.getName(), false),
            type : typeStr,
            commoent: col.getComment(),
            annos: "\t@Column(name = \""+col.getName()+"\" )"]
    if("id".equals(Case.LOWER.apply(col.getName())))
      comm.annos +=["@Id"]
    fields += [comm]
  }
}

// 处理类名(这里是因为我的表都是以t_命名的,所以需要处理去掉生成类名时的开头的T,
// 如果你不需要那么请查找用到了 javaClassName这个方法的地方修改为 javaName 即可)
def javaClassName(str, capitalize) {
  def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
          .collect { Case.LOWER.apply(it).capitalize() }
          .join("")
          .replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_")
  // 去除开头的T  http://developer.51cto.com/art/200906/129168.htm
  s = s[1..s.size() - 1]
  capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1]
}

def javaName(str, capitalize) {
//    def s = str.split(/(?<=[^\p{IsLetter}])/).collect { Case.LOWER.apply(it).capitalize() }
//            .join("").replaceAll(/[^\p{javaJavaIdentifierPart}]/, "_")
//    capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1]
  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 changeStyle(String str, boolean toCamel){
  if(!str || str.size() <= 1)
    return str

  if(toCamel){
    String r = str.toLowerCase().split('_').collect{cc -> Case.LOWER.apply(cc).capitalize()}.join('')
    return r[0].toLowerCase() + r[1..-1]
  }else{
    str = str[0].toLowerCase() + str[1..-1]
    return str.collect{cc -> ((char)cc).isUpperCase() ? '_' + cc.toLowerCase() : cc}.join('')
  }
}

static String genSerialID()
{
  return "\tprivate static final long serialVersionUID =  "+Math.abs(new Random().nextLong())+"L;"
}

 

 5,通过自定义规则生成代码

IntelliJ IDEA 自定义 Generate POJOs.groovy 生成 POJO

 

 

 

 

6,想要有@Data,@Entity和@ Column注释,请加入lombok和persistence-api依赖

<dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>persistence-api</artifactId>
        <version>1.0.2</version>
</dependency>

<dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.8</version>
</dependency>    

 

7,生成POJO效果如下

package com.n22.cs.drp.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;

import lombok.Data;

/**
 * @Description  
 * @Author  zhulei
 * @Date 2020-07-08 
 */

@Data
@Entity
@Table ( name ="tr_dept_eleme_mapping" )
public class TrDeptElemeMappingEntity  implements Serializable {

    private static final long serialVersionUID =  6224989432472255038L;

    /**
     * 部门内部代码
     */
       @Column(name = "inner_code" )
    private String innerCode;

    /**
     * 饿了么对应的商铺Id
     */
       @Column(name = "shop_id" )
    private String shopId;

    /**
     * 达达商铺号
     */
       @Column(name = "dada_shop_id" )
    private String dadaShopId;

    /**
     * 权重-占的百分比
     */
       @Column(name = "proportion" )
    private Long proportion;

    /**
     * 关联的内代码
     */
       @Column(name = "rela_inner_code" )
    private String relaInnerCode;

    /**
     * 蜂鸟对应的门店Id
     */
       @Column(name = "fengniao_shop_id" )
    private String fengniaoShopId;

    /**
     * 美团对应的门店Id
     */
       @Column(name = "meituan_shop_id" )
    private String meituanShopId;

    /**
     * 配送时间(针对预订单)
     */
       @Column(name = "delivery_time" )
    private String deliveryTime;

    /**
     * 1-饿了么 2-美团
     */
       @Column(name = "source_type" )
    private String sourceType;

}

 

相关文章:

  • 2021-05-02
  • 2021-08-01
  • 2021-07-22
  • 2022-12-23
  • 2022-12-23
  • 2021-10-28
  • 2021-11-16
  • 2022-01-12
猜你喜欢
  • 2021-12-20
  • 2022-01-15
  • 2022-12-23
  • 2021-07-08
  • 2021-10-22
相关资源
相似解决方案