自定义Generate POJOs.groovy

红太狼 2020-11-15 14:28 1466阅读 0赞

Intellij IDEA 通过数据库表逆向生成带注释的实体类文件(Generate POJOs.groovy)

生成JPA实体文件,生成的代码如下:

  1. import lombok.Data;
  2. import javax.persistence.*;
  3. import java.io.Serializable;
  4. import io.swagger.annotations.ApiModel;
  5. import io.swagger.annotations.ApiModelProperty;
  6. @Table ( name ="image" )
  7. @Data
  8. @ApiModel
  9. public class Image implements Serializable{
  10. private static final long serialVersionUID = 1L;
  11. @Id
  12. @Column(name = "id" )
  13. @ApiModelProperty( value="id")
  14. private String id;
  15. @Column(name = "entity_id" )
  16. @ApiModelProperty( value="实体id-可关联作业单")
  17. private String entity_id;
  18. @Column(name = "image_name" )
  19. @ApiModelProperty( value="图片名称")
  20. private String image_name;
  21. @Column(name = "image_path" )
  22. @ApiModelProperty( value="图片路径")
  23. private String image_path;
  24. @Column(name = "create_time" )
  25. @ApiModelProperty( value="创建时间")
  26. private java.util.Date create_time;
  27. @Column(name = "update_time" )
  28. @ApiModelProperty( value="修改时间")
  29. private java.util.Date update_time;
  30. }

Generate POJOs.groovy 内容如下

  1. import com.intellij.database.model.DasTable
  2. import com.intellij.database.model.ObjectKind
  3. import com.intellij.database.util.Case
  4. import com.intellij.database.util.DasUtil
  5. import java.time.LocalDateTime
  6. import java.time.format.DateTimeFormatter
  7. /*
  8. * Available context bindings:
  9. * SELECTION Iterable<DasObject>
  10. * PROJECT project
  11. * FILES files helper
  12. * update by yitianRen 20200324
  13. */
  14. packageName = "com.nimble.ydtb.api.entity;"
  15. typeMapping = [
  16. (~/(?i)int/) : "Integer", //数据库类型和Jave类型映射关系
  17. (~/(?i)float|double|decimal|real/): "Double",
  18. (~/(?i)bool|boolean/) : "Boolean",
  19. (~/(?i)datetime|timestamp/) : "java.util.Date",
  20. (~/(?i)date/) : "java.sql.Date",
  21. (~/(?i)time/) : "java.sql.Time",
  22. (~/(?i)/) : "String"
  23. ]
  24. FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir ->
  25. SELECTION.filter { it instanceof DasTable }.each { generate(it, dir) }
  26. }
  27. def generate(table, dir) {
  28. def className = javaName(table.getName(), true)
  29. def fields = calcFields(table)//更改实体生成规则
  30. new File(dir, className + ".java").withPrintWriter { out -> generate(out, className, fields, table) }//输出实体类
  31. }
  32. def generate(out, className, fields, table) {
  33. out.println "package $packageName"
  34. out.println ""
  35. out.println "/**\n" +
  36. " * \n" +
  37. " * <p>@Date: " + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yy-MM-dd HH:mm:ss")).toString() + ".</p>\n" +
  38. " *\n" +
  39. " * @author linqh03\n" +
  40. " */"
  41. out.println ""
  42. out.println "import lombok.Data;"
  43. out.println "import javax.persistence.*;"
  44. out.println "import java.io.Serializable;"
  45. out.println "import io.swagger.annotations.ApiModel;"
  46. out.println "import io.swagger.annotations.ApiModelProperty;"
  47. out.println ""
  48. out.println "@Table ( name =\"" + table.getName() + "\" )"
  49. out.println "@Data"
  50. out.println "@ApiModel"
  51. out.println "public class $className implements Serializable{"
  52. out.println ""
  53. out.println "private static final long serialVersionUID = 1L;"
  54. fields.each() {
  55. out.println ""
  56. // 输出注释 这里和下面的 comm是一一对应的
  57. /* if (isNotEmpty(it.commoent)) {//定义非空校验,it.commoent != ""手写无效
  58. out.println "// ${it.commoent}"
  59. }*/
  60. if (it.name == "id") out.println " @Id"
  61. if (it.annos != "") out.println " ${it.annos}"
  62. out.println " @ApiModelProperty( value=\"${it.commoent}\")"
  63. out.println " private ${it.type} ${it.name};"
  64. }
  65. out.println ""
  66. out.println "}"
  67. }
  68. def calcFields(table) {
  69. DasUtil.getColumns(table).reduce([]) { fields, col ->
  70. def spec = Case.LOWER.apply(col.getDataType().getSpecification())
  71. def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.value
  72. def comm = [
  73. name : col.getName(),
  74. type : typeStr,
  75. commoent: col.getComment(),
  76. annos: "@Column(name = \"" + col.getName() + "\" )"
  77. ]
  78. //对于表中主键自定义注解
  79. if ("pk".equals(Case.LOWER.apply(col.getName()))){
  80. comm.annos = "\t@Id\n"
  81. //自增主键需要
  82. comm.annos += "@Column(name = \"" + col.getName() + "\")"
  83. }
  84. fields += [comm]//字段对照
  85. }
  86. }
  87. def javaName(str, capitalize) {
  88. def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
  89. .collect { Case.LOWER.apply(it).capitalize() }
  90. .join("")
  91. .replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_")
  92. capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1]
  93. }
  94. def isNotEmpty(content) {
  95. return content != null && content.toString().trim().length() > 0
  96. }

发表评论

表情:
评论列表 (有 0 条评论,1466人围观)

还没有评论,来说两句吧...

相关阅读