IDEA连接DB2数据库自动生成Entity实体类(SpringBoot + Spring JPA + Lombok + DB2)

阅读: 评论:0

IDEA连接DB2数据库自动生成Entity实体类(SpringBoot + Spring JPA + Lombok + DB2)

IDEA连接DB2数据库自动生成Entity实体类(SpringBoot + Spring JPA + Lombok + DB2)

一。简介

本篇博客主要介绍如何使用IDEA连接数据库,并且自动生成与table对应的实体类,省时省力。
项目环境:SpringBoot + Spring JPA + Lombok + DB2

二。操作流程

1.连接DB2数据库,打开IDEA,找到最右侧的Database,创建一个新的DB2的连接:

2.注意这里要选Type4和IBM Db2:

3.db信息填完之后再点击Schemas,选择你需要连接的数据库:

4.这个时候你就能在IDEA中看到数据库的详细信息了,如果加载慢,尝试多手动点击刷新按钮即可:

5.选中任意table点击鼠标右键,Scripted Extensions --> GoTo Scripts Directory,找到vy文件,这个是IDEA生成Entity的初始脚本模板:


6.往往IDEA生成的初始模板不能满足我们的需求,所以我们可以复制vy并重命名为vy,下面是我自己写的groovy脚本:

import com.del.DasTable
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil/** Available context bindings:*   SELECTION   Iterable<DasObject>*   PROJECT     project*   FILES       files helper*/
//1.这里更改成你想要的包名
packageName = "ample.demo;"
//2.这里是DB2的类型typeMapping,自行变换成自己需要的
typeMapping = [(~/(?i)int/)                      : "Integer",(~/(?i)float|double|decimal|real/): "BigDecimal",(~/(?i)datetime|timestamp/)       : "LocalDateTime",(~/(?i)date/)                     : "LocalDate",(~/(?i)time/)                     : "LocalTime",(~/(?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 = Name(), true)def fields = calcFields(table)new File(dir, className + ".java").withPrintWriter { out -> generate(out, className, fields, table) }
}def generate(out, className, fields, table) {//3.增加你需要导入的包或者添加的注解out.println "package $packageName"out.println ""out.println "import lombok.AllArgsConstructor;"out.println "import lombok.Data;"out.println "import lombok.NoArgsConstructor;"out.println "perimental.SuperBuilder;"out.println "import javax.persistence.*;"out.println "import java.io.Serializable;"out.println "import java.math.BigDecimal;"out.println "import java.time.LocalDate;"out.println "import java.time.LocalDateTime;"out.println ""out.println "@Data"out.println "@SuperBuilder"out.println "@NoArgsConstructor"out.println "@AllArgsConstructor"out.println "@Entity"out.println "@Table(name = "${Name()}", schema = "FOS")"out.println "public class $className implements Serializable{"out.println ""fields.each() {if (it.annos != "") out.println "  ${it.annos}"//4.增加@Column注解out.println "  @Column(name= = "${it.filed}")"out.println "  private ${it.type} ${it.name};"out.println ""}out.println ""//5.因为使用Lombok插件,注释Getter和Setter方法
//    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) {Columns(table).reduce([]) { fields, col ->def spec = Case.LOWER.DataType().getSpecification())def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.valuefields += [[name : Name(), false),type : typeStr,//6.增加filed属性,给@Column获取table中的属性名filed: Name(),annos: ""]]}
}def javaName(str, capitalize) {def s = com.deStyle.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]
}

三。生成Entity示例

注意,生成的Entity不能自动识别到table中的主键,所以需要手动修改并添加@Id注解

本文发布于:2024-01-29 05:44:08,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170647825113115.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23