一、Generate文件
 import com.intellij.database.model.DasTable
import com.intellij.database.model.ObjectKind
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil import java.sql.Date /*
* Available context bindings:
* SELECTION Iterable<DasObject>
* PROJECT project
* FILES files helper
*/ packageName = "com.sample;" typeMapping = [
(~/(?i)tinyint|smallint|mediumint/) : "Integer",
(~/(?i)int/) : "Integer",
(~/(?i)bool|bit/) : "Boolean",
(~/(?i)float|double|decimal|real/) : "Double",
(~/(?i)datetime|timestamp|date|time/) : "Date",
(~/(?i)blob|binary|bfile|clob|raw|image/): "InputStream",
(~/(?i)number/) : "Integer",
(~/(?i)/) : "String"
] FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir ->
SELECTION.filter { it instanceof DasTable && it.getKind() == ObjectKind.TABLE }.each { generate(it, dir) }
} def generate(table, dir) {
def className = javaClassName(table.getName(), true)
def fields = calcFields(table)
//当是maven项目的时候,需要解开下面的注释
// packageName = getPackageName(dir)
new File(dir, className + ".java").withPrintWriter { out -> generate(out, className, fields, table) }
} def generate(out, className, fields, table) {
out.println "package $packageName"
out.println ""
out.println "import javax.persistence.*;"
out.println "import java.io.Serializable;"
out.println "import com.fasterxml.jackson.annotation.JsonIgnore;"
out.println "import io.swagger.annotations.ApiModel;"
out.println "import io.swagger.annotations.ApiModelProperty;"
out.println "import lombok.Data;"
out.println "import org.hibernate.annotations.DynamicInsert;"
out.println "import org.hibernate.annotations.DynamicUpdate;"
out.println "import org.springframework.data.jpa.domain.support.AuditingEntityListener;" Set types = new HashSet() fields.each() {
types.add(it.type)
} if (types.contains("Date")) {
out.println "import java.util.Date;"
out.println "import org.springframework.data.annotation.LastModifiedDate;"
out.println "import org.springframework.data.annotation.CreatedDate;"
} if (types.contains("InputStream")) {
out.println "import java.io.InputStream;"
}
out.println ""
out.println "/**\n" +
" * @Description: \n" +
" * @Date: Created in" + new java.util.Date().toString() +"\n"+
" * @Author: Cenobitor\n" +
" * @Modified By:\n" +
" */"
out.println "@Data"
out.println "@Entity"
out.println "@DynamicInsert"
out.println "@DynamicUpdate"
out.println "@EntityListeners(AuditingEntityListener.class)"
out.println "@ApiModel(value=\"\",description=\"\")"
out.println "@Table ( name =\"" + table.getName() + "\" )"
out.println "public class $className implements Serializable {"
out.println ""
out.println genSerialID()
fields.each() {
out.println ""
// 输出注释
if (isNotEmpty(it.commoent)) {
out.println "\t/**${it.commoent}*/"
} if (it.annos != "") out.println " ${it.annos}"
// 输出成员变量
out.println "\tprivate ${it.type} ${it.name};"
}
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 : changeStyle(javaName(col.getName(), false), true),
type : typeStr,
commoent: col.getComment(),
annos : "\t@Column(name = \"" + col.getName() + "\" )"]
if ("id".equals(Case.LOWER.apply(col.getName()))){
comm.annos = "\t@Id\n"
//自增主键需要
comm.annos += "\t@GeneratedValue(strategy = GenerationType.IDENTITY)"
}
if ("create_time".equals(Case.LOWER.apply(col.getName()))){
comm.annos += "\n\t@CreatedDate"
}
if ("update_time".equals(Case.LOWER.apply(col.getName()))){
comm.annos += "\n\t@LastModifiedDate"
}
fields += [comm]
}
} // 处理类名(这里是因为我的表都是以t_命名的,所以需要处理去掉生成类名时的开头的T,
// 如果你不需要那么请查找用到了 javaClassName这个方法的地方修改为 javaName 即可)
def javaClassName(str, capitalize) {
def s = str.split(/[^\p{Alnum}]/).collect { def s = Case.LOWER.apply(it).capitalize() }.join("")
// 去除开头的T http://developer.51cto.com/art/200906/129168.htm
s = s[1..s.size() - 1]
capitalize ? s : Case.LOWER.apply(s[0]) + s[1..-1]
} def javaName(str, capitalize) {
def s = str.split(/(?<=[^\p{IsLetter}])/).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
} static String changeStyle(String str, boolean toCamel) {
if (!str || str.size() <= 1)
return str if (toCamel) {
String r = str.toLowerCase().split('_').collect { cc -> Case.LOWER.apply(cc).capitalize() }.join('')
return r[0].toLowerCase() + r[1..-1]
} else {
str = str[0].toLowerCase() + str[1..-1]
return str.collect { cc -> ((char) cc).isUpperCase() ? '_' + cc.toLowerCase() : cc }.join('')
}
} static String genSerialID() {
return "\tprivate static final long serialVersionUID = " + Math.abs(new Random().nextLong()) + "L;";
}
二、自动生成的实体类
 package com.sample;

 import javax.persistence.*;
import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.util.Date;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.annotation.CreatedDate; /**
* @Description:
* @Date: Created inWed Nov 06 17:08:23 CST 2019
* @Author: Cenobitor
* @Modified By:
*/
@Data
@Entity
@DynamicInsert
@DynamicUpdate
@EntityListeners(AuditingEntityListener.class)
@ApiModel(value="",description="")
@Table ( name ="t_staff_role" )
public class StaffRole implements Serializable { private static final long serialVersionUID = 2663305203216589678L; /**自增ID*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id; /**角色名*/
@Column(name = "role_name" )
private String roleName; /**备注*/
@Column(name = "remark" )
private String remark; /**创建人*/
@Column(name = "create_user" )
private String createUser; /**创建时间*/
@Column(name = "create_time" )
@CreatedDate
private Date createTime; /**修改人*/
@Column(name = "update_user" )
private String updateUser; /**更新时间*/
@Column(name = "update_time" )
@LastModifiedDate
private Date updateTime; /**是否删除 0否 1 是*/
@Column(name = "is_deleted" )
private String isDeleted; }

自定义 Generate POJOs.groovy的更多相关文章

  1. (SpringBoot-Jpa)使用Idea数据库自动脚本Generate POJOS生成 Entity对象,

    因:使用SpringBoot -jpa,需要手动配置Entity 但是如果你的表中有很多属性,或者有很多表怎么办?? 每个手动写? 还是用mybatis.写mapper??? 解决:使用idea自动工 ...

  2. Mysql逆向工程效率神器之使用IDE自动生成Java实体类

    Mysql逆向工程效率神器之使用IDE自动生成Java实体类 简介:实战使用IDE根据Mysql自动生成java pojo实体类 1.IDEA连接数据库 菜单View→Tool Windows→Dat ...

  3. IDEA设置类、方法注释模板

    类注释模板 File -> Other Setting -> Default Setting打开默认设置 Editor -> File and Code Templates -> ...

  4. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类

    笔记 6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类     简介:实战使用IDE根据Mysql自动生成java pojo实体类                  1.IDEA连接数 ...

  5. 9_SpringBoot

    一. SpringBoot介绍 1.1. 引言 为了使用SSM框架去开发, 准备SSM框架的模板配置 为了使Spring整合第三方框架, 单独的去编写xml文件 导致SSM项目后期xml文件特别多, ...

  6. Intellij IDEA 从数据库生成 JPA Entity

    首先,需要从调用 Database 窗口 View>Tool Windows>Database 添加到数据库的连接 选择数据的表,然后右击 选择 Scripted Extensions & ...

  7. Intellij IDEA 通过数据库表逆向生成带注释的实体类文件超级详细步骤,附详细解决方案

    参考:https://blog.csdn.net/qq_34371461/article/details/80571281  https://blog.csdn.net/mqchenrong/arti ...

  8. IDEA 逆向工程

    今天要写一个导入功能,需要把数据库的一个表映射成一个pojo,但是这表字段不是一般的多啊...想了想能不能自动生成???在IDEA中点了半天发现还是可以的 下面介绍一下步骤: 第一步:找到这个图标,建 ...

  9. 使用IDEA自动生成Java实体类

    在上一篇帖子里,我们已经通过idea连接上了数据库,这里,通过IDEA自带的功能来根据数据库字段生成POJO 1. 选中一张表,右键--->Scripted Extensions--->选 ...

随机推荐

  1. redis状态详解

    redis查看状态信息 info all|default Info 指定项 server服务器信息 redis_version : Redis 服务器版本 redis_git_sha1 : Git S ...

  2. 【2019.12.11】SDN上机第7次作业

    打开P4的目录,运行主程序 make run 此时输入命令 pingall 会显示所有的网络不通 改为下方代码 /* -*- P4_16 -*- */ #include <core.p4> ...

  3. 利用chocolate包管理工具安装helm

    在powershell中执行 1 安装choco包管理工具 Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object Sys ...

  4. Android 属性property_get/property_set

    每个属性都有一个名称和值,他们都是字符串格式.属性被大量使用在Android系统中,用来记录系统设置或进程之间的信息交换.属性是在整个系统中全局可见的.每个进程可以get/set属性. 在系统初始化时 ...

  5. windows 安装 mysql 启动

    mysqld --defaults-file="d:/lovejava/mysql-5.6/my-default.ini"

  6. .py .pyc .pyd .pyw文件区别

  7. [LeetCode] 235. Lowest Common Ancestor of a Binary Search Tree 二叉搜索树的最近公共祖先

    Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...

  8. [LeetCode] 555. Split Concatenated Strings 分割串联字符串

    Given a list of strings, you could concatenate these strings together into a loop, where for each st ...

  9. rConfig v3.9.2 授权认证与未授权RCE (CVE-2019-16663) 、(CVE-2019-16662)

    rConfig v3.9.2 authenticated and unauthenticated RCE (CVE-2019-16663) and (CVE-2019-16662) 原文:https: ...

  10. MAX10 ADC的一些基知识

    MAX10 ADC 的一些知识 1.        MAX 10 内部集成的12bit SAR ADC的特点为: a.        采样速率高达1Mhz. b.        模拟通道多达18个,单 ...