IDEA+JPA+Swagger如何使用逆向工程生成实体类

IDEA+JPA+Swagger如何使用逆向工程生成实体类

    • Swagger+JPA需要的配置内容

欢迎一起学习

本文整理的是JPA和Swagger在IDEA中的如何生成逆向工程

打开IDEA(IntelliJ IDEA 2018.3.5 x64)
1.当然就是打开IDEA,是不是很臭屁,
2.根据图片展示的步骤操作:View==》ToolWindows==》Database
IDEA+JPA+Swagger如何使用逆向工程生成实体类_第1张图片
3.根据第二步的选择可以出现下图,也可以直接点击右边的Database,然后选择+号,最终选择你需要的数据库,这里是MySQL
IDEA+JPA+Swagger如何使用逆向工程生成实体类_第2张图片
4.接下来就是需要输入数据库连接信息,红色框内如果提示需要下载驱动就点击download就点击,这里由于我已经下载过了,所以不会再显示出来,也可以在输入连接后可以test connection一下,然后再OK
IDEA+JPA+Swagger如何使用逆向工程生成实体类_第3张图片
5.接下来就会出现你所连接的数据库中的表了,右键出现如图选择Go to Scripts Directory
IDEA+JPA+Swagger如何使用逆向工程生成实体类_第4张图片
6.点击上图后就会生成配置文件脚本,里边可以根据自己业务需要做相应修改
IDEA+JPA+Swagger如何使用逆向工程生成实体类_第5张图片
7.这一步后就算是成功90%了,接下来就是生成实体类,根据图示选择Generate POJOs.groovy,这里就是你生成的配置脚本的名称,你也可以根据自己不同需求生成多个脚本来运行实现展示不同的实体类
IDEA+JPA+Swagger如何使用逆向工程生成实体类_第6张图片

Swagger+JPA需要的配置内容

如果不修改Generate POJOs.groovy也是可以生成的,但是可能是默认的生成信息,我这里是需要Swagger和JPA的注解,所以我将里边的内容做了相应的调整和修改

脚本内容中的packageName = "com.sncy.evaluateservice.entity;"需要是你自己的实体类的路径做相应的修改即可

import com.intellij.database.model.DasTable
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil

import java.text.SimpleDateFormat

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

packageName = "com.sncy.evaluateservice.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 }.each { generate(it, dir) }
}

def generate(table, dir) {
  def className = javaName(table.getName(), true)
  def fields = calcFields(table)
  //转utf-8
  new PrintWriter(new OutputStreamWriter(new FileOutputStream(new File(dir, className + ".java")), "UTF-8")).withPrintWriter { out -> generate(out, className, fields, table) }
}

def generate(out, className, fields,table) {
  out.println "package $packageName"
  out.println ""
  out.println ""
  out.println "import io.swagger.annotations.ApiModel;"
  out.println "import io.swagger.annotations.ApiModelProperty;"
  out.println "import lombok.Data;"
  out.println "import lombok.experimental.Accessors;"
  out.println "import org.hibernate.annotations.*;"
  out.println "import javax.persistence.*;"
  out.println "import javax.persistence.Entity;"
  out.println "import javax.persistence.Table;"
//  out.println "import java.io.Serializable;"


  /***************/
  Set types = new HashSet()
  fields.each() {
    types.add(it.type)
  }
  if (types.contains("Date")) {
    out.println "import java.util.Date;"
  }
  out.println ""
  out.println "/** \n" +
          " * @Author aklcoming \n" +
          " * @Date " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " \n" +
          " */"
  out.println "@Data"
  out.println "@Entity"
  out.println "@Table ( name =\"" + table.getName() + "\" )"
  out.println "@ApiModel(value = \"Entity Of "+table.getName()+"\")"
  out.println "@DynamicInsert"
  out.println "@DynamicUpdate"
  out.println "@Accessors(chain = true)"
  out.println "public class $className {"
//  implements Serializable
//  out.println ""
//  out.println genSerialID()
  /****************/
//  out.println "public class $className {"
//  out.println ""
  fields.each() {
    if (isNotEmpty(it.commoent)) {
      out.println "\t/**"
      out.println "\t * ${it.commoent.toString()}"
      out.println "\t */"
    }
    if ((it.annos+"").indexOf("[@Id]") >= 0) out.println "\t@Id"
    if (it.annos != "") out.println "   ${it.annos.replace("[@Id]", "")}"

    if(it.type=="java.sql.Timestamp"){
      out.println "  private String ${it.name};"
    }else{
      out.println "  private ${it.type} ${it.name};"
    }


  }
  out.println ""
  /*
  * get/set方法
  * */
//  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
    def comm = [
            colName : col.getName(),
            name    : javaName(col.getName(), false),
            type    : typeStr,
            commoent: col.getComment(),
            annos: "@ApiModelProperty(value = \""+col.getComment()+"\", name =\""+javaName(col.getName(), false)+"\",required = false)"]
            //annos   : "@Column(name = \"" + col.getName() + "\" )"]
    if ("id".equals(Case.LOWER.apply(col.getName())))
      comm.annos += ["@Id"]
    fields += [comm]
  }
}

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]
}

//判断是否为空
def isNotEmpty(content) {
  return content != null && content.toString().trim().length() > 0
}
//生成序列化的serialVersionUID
static String genSerialID() {
  return "\tprivate static final long serialVersionUID =  " + Math.abs(new Random().nextLong()) + "L;"
}

结果就生成所需要的实体类

IDEA+JPA+Swagger如何使用逆向工程生成实体类_第7张图片

你可能感兴趣的:(IDEA+JPA+Swagger如何使用逆向工程生成实体类)