自定义 Generate POJOs.groovy
一、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的更多相关文章
- (SpringBoot-Jpa)使用Idea数据库自动脚本Generate POJOS生成 Entity对象,
因:使用SpringBoot -jpa,需要手动配置Entity 但是如果你的表中有很多属性,或者有很多表怎么办?? 每个手动写? 还是用mybatis.写mapper??? 解决:使用idea自动工 ...
- Mysql逆向工程效率神器之使用IDE自动生成Java实体类
Mysql逆向工程效率神器之使用IDE自动生成Java实体类 简介:实战使用IDE根据Mysql自动生成java pojo实体类 1.IDEA连接数据库 菜单View→Tool Windows→Dat ...
- IDEA设置类、方法注释模板
类注释模板 File -> Other Setting -> Default Setting打开默认设置 Editor -> File and Code Templates -> ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类
笔记 6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类 简介:实战使用IDE根据Mysql自动生成java pojo实体类 1.IDEA连接数 ...
- 9_SpringBoot
一. SpringBoot介绍 1.1. 引言 为了使用SSM框架去开发, 准备SSM框架的模板配置 为了使Spring整合第三方框架, 单独的去编写xml文件 导致SSM项目后期xml文件特别多, ...
- Intellij IDEA 从数据库生成 JPA Entity
首先,需要从调用 Database 窗口 View>Tool Windows>Database 添加到数据库的连接 选择数据的表,然后右击 选择 Scripted Extensions & ...
- Intellij IDEA 通过数据库表逆向生成带注释的实体类文件超级详细步骤,附详细解决方案
参考:https://blog.csdn.net/qq_34371461/article/details/80571281 https://blog.csdn.net/mqchenrong/arti ...
- IDEA 逆向工程
今天要写一个导入功能,需要把数据库的一个表映射成一个pojo,但是这表字段不是一般的多啊...想了想能不能自动生成???在IDEA中点了半天发现还是可以的 下面介绍一下步骤: 第一步:找到这个图标,建 ...
- 使用IDEA自动生成Java实体类
在上一篇帖子里,我们已经通过idea连接上了数据库,这里,通过IDEA自带的功能来根据数据库字段生成POJO 1. 选中一张表,右键--->Scripted Extensions--->选 ...
随机推荐
- 原创:协同过滤之spark FP-Growth树应用示例
上一篇博客中,详细介绍了UserCF和ItemCF,ItemCF,就是通过用户的历史兴趣,把两个物品关联起来,这两个物品,可以有很高的相似度,也可以没有联系,比如经典的沃尔玛的啤酒尿布案例.通过Ite ...
- python学习笔记一: 《python3 input()函数》
一.在学习之前需要先了解: 1.Python3.x 中 input() 函数接受一个标准输入数据,返回为 string 类型,即把任何输入看作str. 2.input可以用作文本输入,如用户名,密码框 ...
- 作业——12 hadoop大作业
作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 Hadoop综合大作业 1.以下是爬虫大作业产生的csv文件 ...
- .NET Core Startup启动类
.NET Framework 早期架构 在.NET Core面世之前,也就是.NET Framework时代,我们的软件架架构有一些比较通用的架构.抛开我们的业务组件,在我们的系统中我们总会有一些基础 ...
- jquery数组倒序
倒叙前:var mem = [1, 2, 3]: 倒序后:var men1=[3,2,1]: <script type="text/javascript"> $(fun ...
- java.sql.SQLException: Data truncated for column 'seat_number' at row 1
项目中try catch 出现这种情况,就去检查下数据库列类型和项目中实体类的id类型是否一致.数据库id是int类型的,项目实体类是String类型的,项目save功能无法保存,导致了我的这个异常.
- Android adb命令打印activity堆栈
ubuntu系统: adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p' window ...
- how-does-mysql-replication-really-work/ what-causes-replication-lag
https://www.cnblogs.com/kevingrace/p/6274073.html https://www.cnblogs.com/kevingrace/p/6261091.html ...
- BIM数据格式中IFC的标准及格式
传统工程数据往往零散且片段的储存在各个不同的地方,数据格式也有各种不同的形式互相搭配,最常见的有图形(施工图.大样图.断面图.流程图等).文字(各种说明文件).数字(各种统计.数量或价格数据),这些数 ...
- (转载)CNN 模型所需的计算力(FLOPs)和参数(parameters)数量计算
FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度.是一个衡量硬件性能的指标. FLOPs:注意s小写,是f ...