IDEA POJO开发神器之Groovy的使用详解

暂时只对 MySQL进行了测试

项目使用 Lombok MyBatis-Plus

一:使用步骤首先在项目右侧找到 DataBase 如图 没有请参考 idea中database不显示问题

2.点开之后进行数据库连接(注意没有驱动的请下载相关数据库驱动)具体步骤如图

点开 + 号

选择Date Source

找到相应的数据库 这里我使用的是 mysql

如果没有 Dirver 请下载 idea 会在窗口左下角给提示(这里具体在什么位置我也记不清楚)输入相关连接信息

过程中出现任何问题,请在留言区留言(萌新基本全天在线)连接上之后如果没有需要的数据可以点击如下图方式

先设置groovy

替换(有些地方需要注意,具体看下方源码)

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

import java.time.LocalDate

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

// 此处指定包路径,路径需要自行维护;
packageName = "com.qgy.web.entity;"
// 此处指定对应的类型映射,可按需修改,目前tinyint如果要映射到自定义枚举类型,只能手动修改
typeMapping = [
  (~/(?i)bigint/)     : "Long",
  (~/(?i)int/)      : "Integer",
  (~/(?i)tinyint/)     : "Boolean",
  (~/(?i)float|double|decimal|real/): "BigDecimal",
  (~/(?i)time|datetime|timestamp/) : "LocalDateTime",
  (~/(?i)date/)      : "LocalDate",
  (~/(?i)/)       : "String"
]

// 上面用到类和它的导入路径的之间的映射
importMap = [
  "BigDecimal" : "java.math.BigDecimal",
  "LocalDate" : "java.time.LocalDate",
  "LocalDateTime": "java.time.LocalDateTime",
]

// 导入路径列表,下面引用的时候会去重,也可以直接声明成一个 HashSet
importList = []

// 弹出选择文件的对话框
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) + "Entity"
 def fields = calcFields(table)
 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 "import lombok.Data;"
 out.println "import lombok.EqualsAndHashCode;"
 out.println "import lombok.experimental.Accessors;"
 out.println "import com.baomidou.mybatisplus.annotation.*;"
 out.println "import java.io.Serializable;"
 // 去重后导入列表
 importList.unique().each() { pkg ->
  out.println "import " + pkg + ";"
 }
 out.println ""
 // 添加类注释
 out.println "/**"
 // 如果添加了表注释,会加到类注释上
 if (isNotEmpty(table.getComment())) {
  out.println " * " + table.getComment()
 }
 out.println " *"
 out.println " * @author 输入作者"
 out.println " * @date " + LocalDate.now()
 out.println " */"
 // 添加类注解
 out.println "@Data"
 out.println "@EqualsAndHashCode(callSuper = false)"
 out.println "@Accessors(chain = true)"
 out.println "@TableName(\"${table.getName()}\")"
 out.println "public class $className implements Serializable {"
 out.println ""
 out.println genSerialID()
 boolean isId = true
 // 遍历字段,按下面的规则生成
 fields.each() {
  // 输出注释
  if (isNotEmpty(it.comment)) {
   out.println "\t/**"
   out.println "\t * ${it.comment}"
   out.println "\t */"
  }
  // 这边默认第一个字段为主键,实际情况大多数如此,遇到特殊情况可能需要手动修改
  if (isId) {
   out.println "\t@TableId(type = IdType.AUTO)"
   isId = false
  }
  if ((it.annos + "").indexOf("[@Id]") >= 0) out.println "\t@Id"

  if (it.annos != "") out.println " ${it.annos.replace("[@Id]", "")}"

  out.println "\tprivate ${it.type} ${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
  if (importMap.containsKey(typeStr)) {
   importList.add(importMap.get(typeStr))
  }
  fields += [[
       name : javaName(col.getName(), false),
       type : typeStr,
       comment: col.getComment(),
       annos : "\t@TableField(\"" + col.getName() + "\" )"
     ]]
 }
}

def isNotEmpty(content) {
 return content != null && content.toString().trim().length() > 0
}

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

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

选中需要的数据库,找到需要生成实体类的表这里我就随便选择一个。右键选择

在左侧列表找到文件名之后点击会有弹窗选择你要存放的地方点击🆗就行了,效果如下

package com.qgy.web.entity;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 超级管理员账号信息表
 *
 * @author rog
 * @date 2020-07-20
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sys_super")
public class SysSuperEntity implements Serializable {

	private static final long serialVersionUID = 5132404354445122973L;
	/**
	 * 主键id标识
	 */
	@TableId(type = IdType.AUTO)
 	@TableField("id" )
	private Integer id;

	/**
	 * 管理员id唯一标识
	 */
 	@TableField("account_id" )
	private String accountId;

	/**
	 * 管理员账号
	 */
 	@TableField("account" )
	private String account;

	/**
	 * 管理员密码
	 */
 	@TableField("account_password" )
	private String accountPassword;

	/**
	 * 上一次登录ip
	 */
 	@TableField("account_ip_last" )
	private String accountIpLast;

	/**
	 * 当前登录ip
	 */
 	@TableField("account_ip_now" )
	private String accountIpNow;

	/**
	 * 最近一次登录时间
	 */
 	@TableField("login_time" )
	private LocalDateTime loginTime;

	/**
	 * 是否启用
	 */
 	@TableField("isEnable" )
	private Integer isEnable;
}

到此这篇关于IDEA POJO开发神器之Groovy的使用的文章就介绍到这了,更多相关IDEA POJO Groovy内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何使用IDEA的groovy脚本文件生成带JPA注解的实体类(图文详解)

    牛逼!IDEA不愧为神器,结合Groovy脚本,简直天下无敌,如今, 有许许多多的插件或者编辑器都支持根据数据表自动生成数据实体类了, 比如IDEA, 各种MyBatis的代码生成工具, 等等:本篇介绍一下如何使用IDEA的groovy脚本文件生成带JPA注解的实体类. # 使用IDEA连接数据库 注意 正式版IDEA才有此功能, 社区版木有 演示图片使用的IDEA版本为2018.3, 不同版本界面可能有细小差别 1.创建新的数据连接 如果没有, 可以上方菜单栏: 视图-工具窗口-Databas

  • IDEA POJO开发神器之Groovy的使用详解

    暂时只对 MySQL进行了测试 项目使用 Lombok MyBatis-Plus 一:使用步骤首先在项目右侧找到 DataBase 如图 没有请参考 idea中database不显示问题 2.点开之后进行数据库连接(注意没有驱动的请下载相关数据库驱动)具体步骤如图 点开 + 号 选择Date Source 找到相应的数据库 这里我使用的是 mysql 如果没有 Dirver 请下载 idea 会在窗口左下角给提示(这里具体在什么位置我也记不清楚)输入相关连接信息 过程中出现任何问题,请在留言区留

  • Python周期任务神器之Schedule模块使用详解

    目录 1.准备 2.基本使用 参数传递 获取目前所有的作业 取消所有作业 标签功能 设定作业截止时间 立即运行所有作业,而不管其安排如何 3.高级使用 装饰器安排作业 并行执行 日志记录 异常处理 如果你想在Linux服务器上周期性地执行某个 Python 脚本,最出名的选择应该是 Crontab 脚本,但是 Crontab 具有以下缺点: 1.不方便执行秒级的任务. 2.当需要执行的定时任务有上百个的时候,Crontab的管理就会特别不方便 另外一个选择是 Celery,但是 Celery 的

  • idea 开发神器之idea插件汇总

    1.lombok @Data注解在类上,会为类的所有属性自动生成setter/getter.equals.canEqual.hashCode.toString方法, 如为final属性,则不会为该属性生成setter方法. 2.Free MyBatis plugin 方便点击去接口,去到xml文件编写的方法,不用来回找了 3.EasyCode 自动生成文件 基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml). 只要是与数据库相关的代码都可以通

  • IDEA必备开发神器之EasyCode

    1.打开IntelliJ IDEA 新建一个maven工程 2.选择工程存放目录 3.下载安装EasyCode插件 file->settings->plugins 搜索Easy Code 搜索到后点击Install 我这里安装过了 安装完成会让你重启IDEA. 如何判断是否安装成功 file->settings->Other settings 看是否有Easy Code这个选项 4.引入Easy Code模板 (可以根据个人情况定制 也可以使用默认的) 5.创建数据库,数据表 6.

  • git 一个可以提高开发效率的命令:cherry-pick详解

    各位码农朋友们一定有碰到过这样的情况:在develop分支上辛辛苦苦撸了一通代码后开发出功能模块A,B,C,这时老板过来说,年青人,我们现在先上线功能模块A,B.你一定心里一万只草泥马奔腾而过,但为了混口饭吃必须得按老板的意思办事啊. 怎么办?一个办法就是,重新建一个分支,然后再把功能模块C回退,留下功能模块A,B.这种做法不是不行,但是有更好的办法,那就是git所提供的cherry-pick功能. cherry-pick类似于一个定制化的merge,它可以把其它分支上的commit一个个摘下来

  • Golang验证器之validator是使用详解

    目录 前言 什么是validator 安装 使用方法 校验规则 跨字段验证 错误处理 小结 前言 对于HTTP请求,我们要在脑子里有一个根深蒂固的概念,那就是任何客户端传过来的数据都是不可信任的.那么开发接口的时候需要对客户端传提交的参数进行参数校验,如果提交的参数只有一个两个,这样我们可以简单写个if判断,那么要是有很多的参数校验,那么满屏都是参数校验的if判断,效率不仅低还不美观,接下来我们介绍一个参数校验器validator. 什么是validator Validator 是一个 Gola

  • IOS开发基础之二维数组详解

    IOS开发基础之二维数组详解 首先我们知道OC中是没有二维数组的,二维数组是通过一位数组的嵌套实现的,但是别忘了我们有字面量,实际上可以和C/C++类似的简洁地创建和使用二维数组.这里总结了创建二维数组的两种方法以及数组的访问方式. 通过字面量创建和使用二维数组(推荐) // 1.字面量创建二维数组并访问(推荐) NSArray *array2d = @[ @[@11,@12,@13], @[@21,@22,@23], @[@31,@32,@33] ]; // 字面量访问方式(推荐) NSLog

  • JSP开发之生成图片验证码技术的详解

    JSP开发之生成图片验证码技术的详解 我们在网页注册用户时,常常会需要格根据图片给的图片验证码把验证码输进去.那么我们今天就来学习这个. 简单来说分为三步骤: 1.底层用Java实现生成验证码图片 2.通过配置文件调用实现Java生成片 3.通过HTML技术把图片显示到网页 首先是最底层Java生成图片代码 package cn.hncu.servlets; import java.awt.Color; import java.awt.Font; import java.awt.Graphics

  • IOS 开发中画扇形图实例详解

    IOS 开发中画扇形图实例详解 昨天在做项目中,遇到一个需要显示扇形图的功能,网上搜了一下,发现code4app里面也没有找到我想要的那种类似的效果,没办法了,只能自己学习一下如何画了. 首先我们需要了解一个uiview的方法 -(void)drawRect:(CGRect)rect 我们知道了这个方法,就可以在自定义UIView的子类的- (void)drawRect:(CGRect)rect里面绘图了,关于drawrect的调用周期,网上也是一找一大堆,等下我会整理一下,转载一篇供你们参考.

  • Android程序开发中单选按钮(RadioGroup)的使用详解

    在还没给大家介绍单选按钮(RadioGroup)的使用,先给大家展示下效果图吧: xml文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_heig

随机推荐