idea怎么根据数据库表自动生成JPA实体类
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇内容主要讲解"idea怎么根据数据库表自动生成JPA实体类",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"idea怎么根据数据库表自动生成JPA实体类"
千家信息网最后更新 2025年12月02日idea怎么根据数据库表自动生成JPA实体类
本篇内容主要讲解"idea怎么根据数据库表自动生成JPA实体类",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"idea怎么根据数据库表自动生成JPA实体类"吧!
在一些软件开发过程模式下,可能会需要根据数据库表生成对应的实体。在idea工具中如何做到这点呢?最简单的答案可能是使用插件吧。其实还有一个很快捷的方法,步骤如下:
通过view->tool windows->database菜单,打开数据库工具
连接数据库
选定需要生成实体类的表,右键菜单选择scripted extensions,有一个Generate POJOs.groovy
如此生成的实体类也许不能满足你的需求,你可以自己写一个groovy脚本来生成符合需求的实体类。在上面的第三步中,下面有一个go to scripts directory菜单,即可打开脚本目录。在此目录下新建一个脚本,比如Generate jpa Entity Object.groovy。
比如我创建的脚本如下
import com.intellij.database.model.DasTableimport com.intellij.database.util.Caseimport com.intellij.database.util.DasUtil/* * Available context bindings: * SELECTION Iterable* PROJECT project * FILES files helper */packageName = "me.test.entity;"typeMapping = [ (~/(?i)bigint/) : "Long", (~/(?i)tinyint/) : "Boolean", (~/(?i)int/) : "Integer", (~/(?i)float|double|decimal|real/): "Double", (~/(?i)datetime|timestamp/) : "java.sql.Timestamp", (~/(?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) 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 "import lombok.Data;" out.println "import javax.persistence.*;" out.println "" out.println "/**" out.println " * entity class for ${table.getName()}" if (isNotEmpty(table.getComment())) { out.println " * ${table.getComment()}" } out.println "*/" out.println "@Data" out.println "@Entity" out.println "@Table(name = \"${table.getName()}\")" out.println "public class $className {" out.println "" fields.each() { out.println "\t/**" out.println "\t* ${isNotEmpty(it.comment) ? it.comment : it.name}" out.println "\t*/" if (it.annos.size() > 0) it.annos.each() { out.println "\t${it}" } 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 anos = []; if (Case.LOWER.apply(col.getName()).equals('id')) { anos += ["@Id", "@GeneratedValue(strategy = GenerationType.IDENTITY)"] } else { anos += ["@Column(name = \"${col.getName()}\")"] } def field = [ name : javaName(col.getName(), false), type : typeStr, comment: col.getComment(), annos: anos] fields += [field] }}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]}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('') }}
到此,相信大家对"idea怎么根据数据库表自动生成JPA实体类"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
实体
生成
数据
数据库
脚本
自动生成
菜单
内容
工具
方法
目录
需求
学习
实用
更深
兴趣
实用性
实际
插件
操作简单
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
魔兽不同服务器组队
计算机网络和计算机网络技术
数据库技术及应用阶段作业
什么是运营商最新服务器
web服务器构架
网络安全协议复杂性
串口服务器ttl信号测试
开封大学计算机网络技术前身是
呈贡区网络安全
远建网络技术咨询记划
网络技术应用真题
h3c机架服务器默认的ip
服务器管理器可以禁网么
rdp远程连接服务器
软件开发rpm
徐州项目软件开发产品介绍
大学学软件开发可以做什么工作
中国网络安全谁是最大
闵行区项目软件开发服务大概费用
嵌入式软件开发不会写代码
网络安全对青少年有什么害处
优谷互联网络科技有限公司
无锡加工软件开发代理商
正规网络技术分类资费
两台电脑 数据库同步
如何实现数据库的删除增加
都市频道网络安全守护者
推荐的网络安全功能
教务系统数据库视图
网络安全一区二区三区