IDEA之MySQL之快速生成实体类之解决实体类中字段命名的问题【解决字段命名规范的驼峰问题】

在新手阶段是否遇到这样一个坑?在自己设计好一个MVC架构模式(简易版本)完成,摩擦手掌开干的时候。看到某个商城的MySQL数据库中N多的表和字段??!!。

因为刚刚入坑Java,没太多经验,但是想到这个万能IDEA肯定不会让我失望,想到旁边的同学一个字一个字对着字段名输入到实体类中我...作为一名专业的程序猿Ctrl+C+V不能满足与我了,我要一键!!!生成然后果断百度。

嘿嘿~~~(●ˇ∀ˇ●),果然idea没有让我失望,在IDEA中有Database可以连接MySQL还能执行、查看等更重要方便!果断跟着教程来了一遍,嘿嘿MySQL之前配置过idea连接起来没啥太多问题。

然后 面向百度编程之IDEA快速生成实体类 ,在看到这样文章:https://blog.csdn.net/aimashi620/article/details/80913422

一步一步跟着走,很好但是最后一步让人不爽,最后生成的私有属性都是驼峰规范的属性???而且最后解决办法也只是替换掉???这不能忍,的不要不要的我,又开始走上百度编程,最后无果???整个百度都没有这样的教程或者解决方案?我不信然鹅。。。被我找到这样一个文章说在IDEA生成实体类的功能是一个Java中脚本语言生成的,脚本位置附上:

C:\Users\Administrator\.IntelliJIdea2019.1\config\extensions\com.intellij.database\schema

我是默认的Administrator用户如果大家不是可以换成自己电脑中的用户民,然后在该文件夹下有一个:

Generate POJOs.groovy

相信如果你是跟着之前那个生成实体类走过一遍的看这个很眼熟有木有?。。。然后我果断右键看到有一些懵逼???像Java又想python?然后我百度了这个后缀名.groovy我才了解到原来他是:
Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以使用其他 Java 语言编写的库。

看到这里我舒心了~~~果断百度快速入门手册~~~。嘿嘿对于我而言能掌握他的语法就够了。

附上我自己改写的Generate POJOs.groovy

1、保留了生成实体类名驼峰命名规范。

2、自写了一个方法成功解决自动包名(主要

3、生成实体类中的私有属性MySQL字段保持一致主要

4、加入获取字段注释说明,自动放到私有属性后面。

import com.intellij.database.model.DasTable
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil
import java.util.*;
import java.text.SimpleDateFormat;

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


time = today();
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) {
  packageName = getPackageName(dir)
  def className = javaName(table.getName(), true)
  def fields = calcFields(table)
  new File(dir, className + ".java").withPrintWriter { out -> generate(out, className, fields) }
}

def generate(out, className, fields) {
  out.println "package $packageName"
  out.println ""
  out.println "/*"
  out.println "@author:羽大大"  
  out.println "@DESCRIPTION:"  
  out.println "@create:$time"  
  out.println "*/"
  out.println "public class $className {"
  out.println ""
  fields.each() {
    if (it.annos != "") out.println "  ${it.annos}"
    out.println "  private ${it.type} ${it.name};${isNotEmpty(it.comment)?'//'+it.comment.toString():''}"
  }
  out.println ""
  
  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 += [[
				 comment: col.getComment(),
                 name : col.getName(),
                 type : typeStr,
                 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]
}
def today(){
String str = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-d");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.MINUTE, 2);
str = sdf.format(lastDate.getTime());
return str;
}
// Get package path
def getPackageName(dir) {
    return dir.toString().replaceAll("\\\\", ".").replaceAll("/", ".").replaceAll("^.*src.?", "") + ";"
}
//!=null
def isNotEmpty(content) {
    return content != null && content.toString().trim().length() > 0
}

 

相信仔细看到代码的你,一定细心发现了在写进私有属性后面有一段

${isNotEmpty(it.comment)?'//'+it.comment.toString():''

这段是获取MySQL中注释说明的,但是不知道为什么我获取的好像无效?算了不知道为什么,大家如果有兴趣可以自行解决后发在评论区~~~

代码五分钟,调试半小时~溜了溜了。

PS:复制粘贴的时候记住不要带格式哦~~~尽量保存utf-8编码~

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值