idea怎么根据数据库表自动生成JPA实体类
发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,本篇内容主要讲解"idea怎么根据数据库表自动生成JPA实体类",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"idea怎么根据数据库表自动生成JPA实体类"
千家信息网最后更新 2025年01月27日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安全错误
数据库的锁怎样保障安全
网络技术应用教学目录
中山大学网络安全学院简介
数据库 存储 json
西安物联网软件开发招聘
网络技术程序设计是什么
软件开发培训学校招聘信息
安全数据库怎么建立
游戏服务器的网络设置
华为研发岗软件开发薪酬
动车组网络技术论文
网络安全科普测试
便宜购物软件开发
网络技术知识竞赛题
口腔医学的数据库
做好残奥会网络安全保障
服务器安全策略删除war包
维普期刊全文数据库
济宁康健网络技术有限公司
app后台常用数据库
郝叶力网络安全
淘宝卖家软件开发
石家庄众人互联网科技公司
网络安全预防课件
风电场监控系统网络安全设备配置方案
苹果服务器崩溃对手机有什么影响
学校网络安全保障工作计划
b站服务器时间和北京时间
紫微斗数数据库老易
云南华中世纪互联网科技公司
怎么查地方旅游数据库