idea自定义Generate POJOs.groovy使entity生成自定义注解@Column字段名

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

使用idea的database连接数据库后,在表上右键可以自动生成entity文件,非常方便
idea生成entity
默认生成的entity只要属性与getter setter,可以通过修改Generate POJOs.groovy文件,来自动生成需要的@Column(name = "ID")这样的注解
Generate POJOs.groovy
下面是截取的已经【修改过】得Generate POJOs.groovy文件, 类似python语法,其中的修改是,先在calcFields函数加入filed: col.getName(),
然后在generate函数加入out.println " @Column(name = \"${it.filed}\")"

def generate(out, className, fields) {
  out.println "package $packageName"
  out.println ""
  out.println ""
  out.println "public class $className {"
  out.println ""
  fields.each() {
    if (it.annos != "") out.println "  ${it.annos}"
    out.println "  @Column(name = \"${it.filed}\")"
    out.println "  private ${it.type} ${it.name};"
  }
  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 += [[
                 name : javaName(col.getName(), false),
                 type : typeStr,
                 filed: col.getName(),
                 annos: ""]]
  }
}

最后会直接生成带有@Column(name = "ID")注解的entity,免去手写,也可以自己添加需要的

下面是我修改后的【完整】文件内容
修改的部分

  1. package名称
  2. 导入的类名
  3. 使用lombok插件与jpa注解,使用lombok【注释】了生成getter与setter,jpa的@Table,@Column注解
  4. 数据库对应类型的java类,数据库datetime转为util.date
import com.intellij.database.model.DasTable
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil

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

packageName = "com.bank3d.bank3d_admin.entity;"
typeMapping = [
  (~/(?i)int/)                      : "Long",
  (~/(?i)float|double|decimal|real/): "Double",
  (~/(?i)datetime|timestamp/)       : "Date",
  (~/(?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) {
  def className = javaName(table.getName(), true) + "E"
  def fields = calcFields(table)
  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 ""
  out.println "import lombok.Data;"
  out.println "import lombok.experimental.Accessors;"
  out.println "import org.hibernate.annotations.DynamicInsert;"
  out.println "import org.hibernate.annotations.DynamicUpdate;"
  out.println ""
  out.println "import javax.persistence.Column;"
  out.println "import javax.persistence.Entity;"
  out.println "import javax.persistence.Table;"
  out.println "import java.util.Date;"
  out.println ""
  out.println "@Entity"
  out.println "@Table(name = \"${table.getName()}\")"
  out.println "@Data"
  out.println "@DynamicUpdate"
  out.println "@DynamicInsert"
  out.println "@Accessors(chain = true)"
  out.println "public class $className {"
  out.println ""
  fields.each() {
    if (it.annos != "") out.println "  ${it.annos}"
    out.println "  @Column(name = \"${it.filed}\")"
    out.println "  private ${it.type} ${it.name};"
  }
  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 += [[
                 name : javaName(col.getName(), false),
                 type : typeStr,
                 filed: col.getName(),
                 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]
}

IDEA如何从数据库表生成带字段注释的Model,解决乱码问题,还有自动生成controller问题 都是基于groovy 一、生成Model //import com.intellij.database.model.DasTable //import com.intellij.database.model.ObjectKind //import com.intellij.database.util.Case //import com.intellij.database.util.DasUtil ... 阅读详情

相关推荐

Generate POJOs.groovy

idea上配置好该脚本后,连接数据库后,直接生成带注释的实体类,非常方便,为开发节约很多时间

Intellij IDEA 如何通过数据库表生成注解的实体类图文详细教程

Intellij IDEA 如何通过数据库表生成注解的实体类图文详细教程 Intellij IDEA 如何通过数据库表生成注解的实体类 Contents 第一步:新建一个Maven项目。项目的名称为JpaDemo。 第二步:配置数据库连接。 第三步:配置hibernate文件。 第四步:调出idea实体类生成工具。 第五步:选中需要执行的数据库表。 第六步:查看导出的效果。 ...

liu_yulong的专栏 4万+

别再死记硬背GNN公式了!用PyTorch Geometric从零实现一个GraphSAGE(附完整代码)

本文通过PyTorch Geometric从零实现GraphSAGE模型,深入解析图神经网络的核心原理与实战应用。文章提供完整代码示例,涵盖环境配置、邻居采样、信息聚合等关键步骤,帮助开发者掌握图表示学习技术,避免陷入公式推导的困境。适合希望将GNN应用于实际项目的中级开发者和学生。

weixin_42530570的博客 314

通过idea反向生成实体类问题Generate POJOs.groovy配置

自动生成注解文件,记得把ID逐渐修改一下 /** * 主键 */ /** * 主键 主键 */ @Column(name = "ID" , columnDefinition = "varchar(32) DEFAULT NULL COMMENT '主键 主键'") @Id @GeneratedValue(generator="system_uuid") @GenericGenerator(name="system_uuid",strategy="uuid") pri.

能让你写代码●写出拯救全世界的感觉 3370

intellij idea中使用 @Column注解 字段名下有警告红线,原因及解决办法

intellij idea中使用 @Column注解 字段名下有警告红线,原因及解决办法 第一部分是解决方法,第二部分是原因,可以选择性阅读。 第一部分解决办法: 方法1: -取消所示处对号 方法二 打开Persistence窗口(View -> ToolWindow -> Persistence 右键entityManagerFactory 选择 Assign Data Sources 选择你的数据库连接确认就好了, 没有数据库连接的就先新建。 第二部分: @Column 是属性或方法

qq_41190713的博客 4873

mybatis自动生成@Table、@Column、@Id注解

mybatis自动生成@Table、@Column、@Id注解 在pom.xml中添加如下插件以及插件相关的依赖 <build> <plugins> <plugin> <groupId>org.springframework.bo...

阿斯顿发顺丰水电费的说法都是的博客 2856

5.2.2 映射方法和属性@Column

@Column标记表示所持久化属性所映射表中的字段,该注释的属性定义如下:@Target({METHOD, FIELD}) @Retention(RUNTIME)public @interface Column {String name() default "";boolean unique() default false;boolean nullable() defaul

9143

ideaEntity实体中报错:@Column(name = “zprecordname“, nullable = true, length = 50)解决办法。

亲测有效 第一步: 第二步:选中右键选择 第三步: 亲测有效

GQ_666的博客 836

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

作者:悲凉的秋风blog.csdn.net/qq_34371461/article/details/80571281idea 功能很强大,以前不知道有这样的提升工作效率的方法,虽然有的工...

Java知音 1208

IDEA生成注解、注释的实体类/自定义Genarate POJOS.groovy

使用idea默认配置生成Entity 1、在视图中找到数据库配置,连上数据源; 2、找到需要生成实体类的表,右键选项:Scripted Extensions,IDEA默认脚本为Generate POJOs.groovy,点此选项; 3、在弹出框选择实体类要放置的位置,确认后生成文件; 自定义配置生成Entity生成的实体类可以看出并不能满足我们的需求,当字段过多时,自己添加注释注解会浪费大量时间;所以我们可以自定义脚本实现需求; 1、还是在表格右键选项:Scripted Extensions

weixin_44954052的博客 3220

IDEA自定义Generate POJOs.groovy数据表批量生成实体类

1,idea连接mysql数据库 2,右键数据库表格,打开代码生成器规则文件地址 3,在文件夹下新建新建MyGenerate POJOs.groovy 4,自定义MyGenerate POJOs.groovy import com.intellij.database.model.DasTable import com.intellij.database.model.ObjectKind import com.intellij.database.util.C...

qq_40800950的博客 1499

IDEA 通过数据库表逆向生成带注释的generate pojos.groovy

参考网站 : Intellij IDEA 通过数据库表生成注解的实体类详细步骤 使用工具: IDEA 2020.1.1 参考网站 【解决了@Id注解的问题,添加了参考网站中评论中的@JsonFormat和@DateTimeFormat】 预览 日期格式的字段 /** * 这是登录时间 */ @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @DateTimeFormat(pattern = "yyy.

Khorasho 1142

IDEA反向生成实体的两种方法

网上搜了好几种IDEA反向生成实体的方法,感觉都不是很全面,都存在或多或少的一些小问题,所以自己通过使用进行下总结 第一种方式 通过groovy脚本生成 (该方式灵活,可自己加注解,自己对应相应的数据类型,推荐使用这种) 在IDEA的项目窗口栏最下面可以看到这个 如上图所示创建一个groovy文件,把以下代码复制进去 import com.intellij.database.model.DasTable import com.intellij.database.model.ObjectKind

小奶牛的博客 1902

IDEA中配置@Entity@Column注解指定的字段报错cannot resolve column的问题

问题描述 在IDEA中用注解配置MySQL数据库的实体类Entity时,已经给实体类分配好了数据库源(assign data source)了,由图中的圈1、圈2、圈4可证明;@Entity和@Table均是正常,只有@Column注解,报找不到指定字段(cannot resove column),由图4可知字段实际是有的。 问题分析 造成该问题的原因不在@Column注解,而是在于@Table注解。将@Table注解中的catalog属性换成schama属性,问题即可解决。所以在造成这个问题的最终原因是

破的軍的博客 5186

Generate POJOs.groovy文件(序列化,注解,无参构造函数,toString方法)

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.text.SimpleDateFormat /* * Available context bindings: * SELECTION

一个老头子 1013

@Column注解及属性详解

@Column注解用来标识实体类中属性与数据表中字段的对应关系(1)源码:/* * Copyright (c) 2008, 2009, 2011 Oracle, Inc. All rights reserved. * * This program and the accompanying materials are made available under the * terms of t...

别样的风采是我 20万+

解决:实体类@Column,@Entity和@Table注解爆红

操作步骤如下: 首先打开 视图 -> 工具窗口 -> Persistence 在打开的窗口中,右键单击,选择分配数据源 将对应的数据源添上即可

weixin_46822367的博客 4247

spring 中的@column注解讲解及使用

就像@Table注解用来标识实体类与数据表的对应关系类似,@Column注解来标识实体类中属性与数据表中字段的对应关系。 该注解的定义如下: @Target({METHOD, FIELD}) @Retention(RUNTIME)  public @interface Column {  String name() default "";  boolean unique() default false;  boolean ...

weixin_45528849的博客 1万+

【Mysql】 如何单个(批量)给 mysql 数据库已经存在的表添加字段及注释

一、问题 1.1、环境 电脑环境:Windows 10; 开发工具:IntelliJ IDEA; 数据库环境:Redis 3.2.100 JDK环境: Jdk1.8; 1.2、问题 如何单个(批量)给 mysql 数据库已经存在的表添加字段及注释 二、解答 1、添加单个字段及注释 ALTER TABLE tableName ADD COLUMN code VARCHAR(20) COMMENT '编码'; 2、批量添加 ALTER TABLE tableName ADD (code VARCHAR(20)

陶洲川的博客 2445
上一篇: springboot中Hibernate的Jpa使用NativeQuery原始sql,再用fastjson转pojo
下一篇: springboot完美使用jpa,支持原生sql绑定参数查询与分页转model,完胜jdbctemplate
lukezhang-123
博客等级 码龄17年 162粉丝 308原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值