java学习基地

微信扫一扫 分享朋友圈

已有 1543 人浏览分享

IDEA + Groovy脚本一键生成实体类,用法舒服,高效!

[复制链接]
1543 2

idea 功用很壮大,从前没有明白有如许的提拔事情服从的办法,固然有的东西的确能够间接天生真体类,mapper文件,另有dao接心,可是小我私家以为触及到庞大营业仍是只天生真体类比力好,前面部门便本人弄定就能够了。

1、毗连数据库

翻开项目:

1、面击右边的datesource吐,如果出有该吐,请来自止百度

2、面击 + 号

3、挑选 datasource

4、挑选 mysql

1、挖写一个毗连名,随意挖甚么皆止

2、不消挑选,默许便止

3、挖写数据库毗连的 IP地点,好比当地数据库能够挖写:localhost大概127.0.0.1

4、挖写数据库开放的端标语,普通出设置的话默许皆是3306

5、挖写您需求毗连的数据库名

6、挖写数据库的映雩名

7、挖写数据库暗码

8、那里会有一个驱动需求面击下载,图中是曾经下载好了

9、挖写本人的数据库毗连url,然后能够面击9地点按钮停止测试毗连,当地毗连失利查抄能否开启了mysql效劳

毗连好了如上图所示,能够看到本人的数据库战表,挑选一个表左键,网上教程普通到那里完毕,皆是挑选道Generate POJOs.groovy,然后正在弹出窗心挑选需求天生的文件夹地点便可。

我挑选一张表停止天生示比方下:

表白来除“_”然后以驼峰方法天生潦攀类名,并且开端的package 途径也不合错误,重面是出有正文,出有正文,出有正文!

网上搜了一些办法,皆没有太止,要没有便是四处报错,出辙只能本人瞎揣摩。出念到最初也没有易,上面便是完成:

左键挑选表,正在挑选Generate POJOs.groovy 当甭里那一项:

出去只要Generate POJOs.groovy,左键新建别的一个好比我的叫做:Generate MyPOJOs.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.io.*
  6. import java.text.SimpleDateFormat
  7. /*
  8. * Available context bindings:
  9. *   SELECTION   Iterable<DasObject>
  10. *   PROJECT     project
  11. *   FILES       files helper
  12. */
  13. packageName = ""
  14. typeMapping = [
  15.         (~/(?i)tinyint|smallint|mediumint/)      : "Integer",
  16.         (~/(?i)int/)                             : "Long",
  17.         (~/(?i)bool|bit/)                        : "Boolean",
  18.         (~/(?i)float|double|decimal|real/)       : "Double",
  19.         (~/(?i)datetime|timestamp|date|time/)    : "Date",
  20.         (~/(?i)blob|binary|bfile|clob|raw|image/): "InputStream",
  21.         (~/(?i)/)                                : "String"
  22. ]
  23. FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir ->
  24.     SELECTION.filter { it instanceof DasTable && it.getKind() == ObjectKind.TABLE }.each { generate(it, dir) }
  25. }
  26. def generate(table, dir) {
  27.     def className = javaClassName(table.getName(), true)
  28.     def fields = calcFields(table)
  29.     packageName = getPackageName(dir)
  30.     PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(new File(dir, className + ".java")), "UTF-8"))
  31.     printWriter.withPrintWriter {out -> generate(out, className, fields,table)}
  32. //    new File(dir, className + ".java").withPrintWriter { out -> generate(out, className, fields,table) }
  33. }
  34. // 获得包地点文件夹途径
  35. def getPackageName(dir) {
  36.     return dir.toString().replaceAll("\", ".").replaceAll("/", ".").replaceAll("^.*src(\.main\.java\.)?", "") + ";"
  37. }
  38. def generate(out, className, fields,table) {
  39.     out.println "package $packageName"
  40.     out.println ""
  41.     out.println "import javax.persistence.Column;"
  42.     out.println "import javax.persistence.Entity;"
  43.     out.println "import javax.persistence.Table;"
  44.     out.println "import java.io.Serializable;"
  45.     out.println "import lombok.Getter;"
  46.     out.println "import lombok.Setter;"
  47.     out.println "import lombok.ToString;"
  48.     Set types = new HashSet()
  49.     fields.each() {
  50.         types.add(it.type)
  51.     }
  52.     if (types.contains("Date")) {
  53.         out.println "import java.util.Date;"
  54.     }
  55.     if (types.contains("InputStream")) {
  56.         out.println "import java.io.InputStream;"
  57.     }
  58.     out.println ""
  59.     out.println "/**n" +
  60.             " * @Description  n" +
  61.             " * @Author  Huntern" +
  62.             " * @Date "+ new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + " n" +
  63.             " */"
  64.     out.println ""
  65.     out.println "@Setter"
  66.     out.println "@Getter"
  67.     out.println "@ToString"
  68.     out.println "@Entity"
  69.     out.println "@Table ( name =""+table.getName() +"" )"
  70.     out.println "public class $className  implements Serializable {"
  71.     out.println ""
  72.     out.println genSerialID()
  73.     fields.each() {
  74.         out.println ""
  75.         // 输出正文
  76.         if (isNotEmpty(it.commoent)) {
  77.             out.println "t/**"
  78.             out.println "t * ${it.commoent.toString()}"
  79.             out.println "t */"
  80.         }
  81.         if (it.annos != "") out.println "   ${it.annos.replace("[@Id]", "")}"
  82.         // 输出成员变量
  83.         out.println "tprivate ${it.type} ${it.name};"
  84.     }
  85.     // 输出get/set办法
  86. //    fields.each() {
  87. //        out.println ""
  88. //        out.println "tpublic ${it.type} get${it.name.capitalize()}() {"
  89. //        out.println "ttreturn this.${it.name};"
  90. //        out.println "t}"
  91. //        out.println ""
  92. //
  93. //        out.println "tpublic void set${it.name.capitalize()}(${it.type} ${it.name}) {"
  94. //        out.println "ttthis.${it.name} = ${it.name};"
  95. //        out.println "t}"
  96. //    }
  97.     out.println ""
  98.     out.println "}"
  99. }
  100. def calcFields(table) {
  101.     DasUtil.getColumns(table).reduce([]) { fields, col ->
  102.         def spec = Case.LOWER.apply(col.getDataType().getSpecification())
  103.         def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.value
  104.         def comm =[
  105.                 colName : col.getName(),
  106.                 name :  javaName(col.getName(), false),
  107.                 type : typeStr,
  108.                 commoent: col.getComment(),
  109.                 annos: "t@Column(name = ""+col.getName()+"" )"]
  110.         if("id".equals(Case.LOWER.apply(col.getName())))
  111.             comm.annos +=["@Id"]
  112.         fields += [comm]
  113.     }
  114. }
  115. // 处置类名(那里是由于我的表皆是以t_定名的,以是需求处置来失落天生类名时的开首的T,
  116. // 假如您没有需求那末请查找用到了 javaClassName那个办法的处所修正为 javaName 便可)
  117. def javaClassName(str, capitalize) {
  118.     def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
  119.             .collect { Case.LOWER.apply(it).capitalize() }
  120.             .join("")
  121.             .replaceAll(/[^p{javaJavaIdentifierPart}[_]]/, "_")
  122.     // 来除开首的T  http://developer.51cto.com/art/200906/129168.htm
  123.     s = s[1..s.size() - 1]
  124.     capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1]
  125. }
  126. def javaName(str, capitalize) {
  127. //    def s = str.split(/(?<=[^p{IsLetter}])/).collect { Case.LOWER.apply(it).capitalize() }
  128. //            .join("").replaceAll(/[^p{javaJavaIdentifierPart}]/, "_")
  129. //    capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1]
  130.     def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
  131.             .collect { Case.LOWER.apply(it).capitalize() }
  132.             .join("")
  133.             .replaceAll(/[^p{javaJavaIdentifierPart}[_]]/, "_")
  134.     capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1]
  135. }
  136. def isNotEmpty(content) {
  137.     return content != null && content.toString().trim().length() > 0
  138. }
  139. static String changeStyle(String str, boolean toCamel){
  140.     if(!str || str.size() <= 1)
  141.         return str
  142.     if(toCamel){
  143.         String r = str.toLowerCase().split('_').collect{cc -> Case.LOWER.apply(cc).capitalize()}.join('')
  144.         return r[0].toLowerCase() + r[1..-1]
  145.     }else{
  146.         str = str[0].toLowerCase() + str[1..-1]
  147.         return str.collect{cc -> ((char)cc).isUpperCase() ? '_' + cc.toLowerCase() : cc}.join('')
  148.     }
  149. }
  150. static String genSerialID()
  151. {
  152.     return "tprivate static final long serialVersionUID =  "+Math.abs(new Random().nextLong())+"L;"
  153. }
赶钙代码

完成后,面击此处,挑选project 强返来:

这时候,我玫临次挑选表,左键,挑选我们本人新建的 groovy,然后挑选天生寄存的文件夹途径,天生:

能够看到,天生的类名,package途径,和曾经完成了序量,也减上裂泞解,指清楚明了每一个属薪喀的表字段,假如@Table战@Column出有引进包,借请正在maven中增加相干依靠:

  1. <div class="blockcode"><blockquote>
  2. <dependency>
  3.     <groupId>javax.persistence</groupId>
  4.     <artifactId>persistence-api</artifactId>
  5.     <version>1.0.2</version>
  6. </dependency>
赶钙代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复

评论 2

天下编程  vip终身会员  发表于 2020-12-22 19:07:12 | 显示全部楼层
我擦!我要沙发!

举报 使用道具

回复
小蜗牛  vip终身会员  发表于 2020-12-22 19:41:09 | 显示全部楼层
发发呆,回回帖,工作结束~

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

0

粉丝

138

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Archiver|手机版|java学习基地 |网站地图

GMT+8, 2021-7-30 14:35 , Processed in 0.619101 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.