IDEA中根据数据库自动生成实体类,并自定义所生成的实体类中的注解 @Table @Id @...
使用IDEA项目添加Hibernate扩展,生成实体类并配置实体类中的注解
一、使用Hibernate自动生成实体类
1.在项目上右键,选择Add Framework Support
找到 Hibernate
勾选 OK
2.Ctrl+Alt+Shift+S 快捷键呼出Project Structure
窗口,展开项目,选择Hibernate 点击图示的“+
”号为Hibernate添加xml文件配置。
3.在左侧会出现一个Persistence 点击后右键图示的Hibernate项选择最后一个
4.选择数据库地址(此处需要提前在右侧的Datebase处连接数据库配置)、选择生成的实体类位置、选择要生成实体类的表,OK
这样,表就生成了。但是生成的实体类中的注解可能不如我们所愿,比如@Id注解、@Table注解的缺失,这个怎么配置呢?👇
二、配置自动生成实体类的注解信息
1.如图,选择数据库连接,右键 选择Scripted Extensions
选择第一个,他会让你选择路径,选择生成路径即可,这里要注意,这个选择之后在你选择的包下不会生成任何东西!
2.选择刚才同一个地方的最后一个,展开配置文件目录
3.新建一个MyGenerate POJOs.groovy
,将下面的代码复制进去
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.io.*
import java.text.SimpleDateFormat/** Available context bindings:* SELECTION Iterable<DasObject>* PROJECT project* FILES files helper*/
packageName = ""
typeMapping = [(~/(?i)tinyint|smallint|mediumint/) : "Integer",(~/(?i)int/) : "Long",(~/(?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)/) : "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)packageName = getPackageName(dir)PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(new File(dir, className + ".java")), "UTF-8"))printWriter.withPrintWriter {out -> generate(out, className, fields,table)}// new File(dir, className + ".java").withPrintWriter { out -> generate(out, className, fields,table) }
}// 获取包所在文件夹路径
def getPackageName(dir) {return dir.toString().replaceAll("\\\\", ".").replaceAll("/", ".").replaceAll("^.*src(\\.main\\.java\\.)?", "") + ";"
}def generate(out, className, fields,table) {out.println "package $packageName"out.println ""out.println "import javax.persistence.*;"//out.println "import javax.persistence.Column;"//out.println "import javax.persistence.Entity;"//out.println "import javax.persistence.Table;"//out.println "import java.io.Serializable;"//out.println "import lombok.Getter;"//out.println "import lombok.Setter;"//out.println "import lombok.ToString;"Set types = new HashSet()fields.each() {types.add(it.type)}if (types.contains("Date")) {out.println "import java.util.Date;"}if (types.contains("InputStream")) {out.println "import java.io.InputStream;"}out.println ""out.println "/**\n" +" * @Description \n" +" * @Author lqk\n" +" * @Date "+ new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + " \n" +" */"out.println ""//out.println "@Setter"//out.println "@Getter"//out.println "@ToString"out.println "@Entity"out.println "@Table ( name =\""+table.getName() +"\" )"out.println "public class $className {"//out.println ""//out.println genSerialID()fields.each() {out.println ""// 输出注释if (isNotEmpty(it.commoent)) {out.println "\t/**"out.println "\t * ${it.commoent.toString()}"out.println "\t */"}if (it.annos != "") out.println " ${it.annos.replace("[@Id]", "")}"// 输出成员变量out.println "\tprivate ${it.type} ${it.name};"}// 输出get/set方法
// fields.each() {
// out.println ""
// out.println "\tpublic ${it.type} get${it.name.capitalize()}() {"
// out.println "\t\treturn this.${it.name};"
// out.println "\t}"
// out.println ""
//
// out.println "\tpublic void set${it.name.capitalize()}(${it.type} ${it.name}) {"
// out.println "\t\tthis.${it.name} = ${it.name};"
// out.println "\t}"
// }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() }.valuedef comm =[colName : col.getName(),name : javaName(col.getName(), false),type : typeStr,commoent: col.getComment(),annos: "\t@Column(name = \""+col.getName()+"\" )"]if("id".equals(Case.LOWER.apply(col.getName())))comm.annos +=["@Id"]fields += [comm]}
}// 处理类名(这里是因为我的表都是以t_命名的,所以需要处理去掉生成类名时的开头的T,
// 如果你不需要那么请查找用到了 javaClassName这个方法的地方修改为 javaName 即可)
def javaClassName(str, capitalize) {def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str).collect { Case.LOWER.apply(it).capitalize() }.join("").replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_")// 去除开头的T http://developer.51cto.com/art/200906/129168.htm//s = s[1..s.size() - 1]capitalize || s.length() == 1? 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 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 strif(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;"
}
4.再次进行第一步操作,生成实体类,实体类中就有了@Table
、@Id
等更详尽的注解
相关文章:

Oracle根据日期区间查询Date类型的数据
在Oracle数据库中,根据日期区间查询Date类型的数据 select proposalno,policyno,enddate from 表名 where 时间字段 between to_date(2020-1-1, yyyy/mm/dd) and to_date(2021/8/1,yyyy-mm-dd)

jar包部署shell脚本编写,在服务器上部署jar包,在Linux服务器上部署服务,设置编码格式,设置内存管理
准备步骤: 1.安装java环境,知道java安装目录 2.将jar包拖放或发送至服务器中(目录自定义) 一、编写shell脚本,将以下代码放在shell脚本中,将shell脚本放在jar包同级目录下。编写好后使用sh xxx.sh启动脚本即…

RSA签名算法,计算调用加密报文,安全传输
RSA签名算法 1. 获取当前的时间戳参数 2. 计算参数签名 3. 获取请求对象的MD5密文 4. 通过私钥计算某个参数的RSA签名 5. 转换字符集到utf8 6. MD5加密字符串 7. base64编码 8. base64编码字符串 9. base64解码 /*** 参数签名算法工具类*/ public class RSAUtils {/**…

两步完成项目定时启动,java项目定时启动
两步完成项目定时设置: 在需要定时启动或运行的方法上面加上注解Scheduled //当天只跑一次 Scheduled(cron "0 40 21 * * ?")在启动类上加注解EnableScheduling SpringBootApplication EnableScheduling ComponentScan({"com.xxx.xxx.newinterf&qu…

Java Calendar.add()方法的使用,参数含义。指定时间差。
cal.add()方法中的参数含义: 第一个参数如果是1则代表的是对年份操作,2是对月份操作,3是对星期操作,5是对日期操作,11是对小时操作,12是对分钟操作,13是对秒操作,14是对毫秒操作。 …

jar包升级部署到服务器详细流程,将服务部署在linux中
假设你已经准备好以下东西,即可进行服务部署 一台服务器(云服务器或虚拟机皆可)已安装好的jdk 1.8 的环境(可自行百度)打好的jar包(maven打jar包) 1. 在服务器中新建好你的项目文件目录&#x…

将jar包部署在docker上,将jar包打成镜像,使用docker部署jar包
假设你已经准备好以下东西,即可进行服务部署 一台安装好docker的linux服务器(安装docker见安装docker) 准备好的jar包 接下来开始吧! 将jar包上传至服务器(建好文件夹存放以方便管理) 编辑Dockerfile文…

MybatisPlus忽略实体类中的非数据库字段、JPA忽略实体类中的非数据库字段、HeHibernate忽略实体类中的非数据库字段
mybatis plus忽略映射字段时可以在实体类属性上使用以下注解: TableField(exist false):表示该属性不为数据库表字段,但又是必须使用的。 TableField(exist true):表示该属性为数据库表字段。在实体类的属性上面加上这个注解后…

如果你没用过maven的install,你应该了解一下!maven中的install功能及用法。
maven中有一个大多数人都忽视或者没有用到过的一个功能——install,大多数java开发人员都了解maven,使用maven进行依赖管理。但使用的大多数功能不过是clean清理、compile编译、package打包,却很少用到install这个功能,接下来就来…

IDEA中maven的命令及作用
maven中的Lifecycle中的那些按钮都有哪些,都有什么功能呢? validate:验证项目的正确性以及包含所有必要的信息compile:编译源码test:编译和运行测试代码package:把编译好的源码打成包,如jarveri…

docker :open /var/lib/docker/tmp/GetImageBlob318829910: no such file or directory异常解决
千万不要直接去重装docker,不要删除镜像,不要手动创建目录和文件,只需要这样就好了!👇 重启docker服务 sudo systemctl restart docker解决 以上!

设置普通用户执行docker命令,执行docker命令无需输入密码或者切换root用户
每次执行docker命令都要输入密码或者切换root用户,非常不方便,尤其是在shell脚本中就更麻烦了,一起来解决这个问题; 1. 创建名为docker的组,如果之前已经有该组就会提示已存在: sudo groupadd docker gro…

spring boot项目 中止运行 最常用的几种方法
spring boot项目 中止运行 最常用的几种方法: 1. 调用接口,停止应用上下文 RestController public class ShutdownController implements ApplicationContextAware {private ApplicationContext context;PostMapping("/shutdownContext")pub…

力扣每日一题——独一无二出现的次数
难度:简单 题目: 给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。 如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。 示例 1: 输入:arr [1,2,2,1,1,3] 输出&a…

java1.8新增超实用Map方法——Map.getOrDefault()和Map.value()方法详解
1. Map.getOrDefault() 翻译一下官方解释: java.util.Map<K, V> V getOrDefault(Object key, V defaultValue) 返回到指定键所映射的值,或defaultValue如果此映射包含该键的映射。 入参: 键 - 其关联值的键是要返回 默认值 - 键的默认…

力扣解题——求根到叶子节点数字之和
难度:中等 题目:给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。 例如,从根到叶子节点路径 1->2->3 代表数字 123。 计算从根到叶子节点生成的所有数字之和。 …

docker安装kafka消息队列
1. 启动zookeeper容器(Zookeeper用于崩溃检测,实现Topic发现,和维护Topic的生产和消费状态) docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper2. 启动kafka容器 docker run -d --name kafka -p 9092:90…

一文吃透JAVA定时器格式
JAVA 定时器时间格式 基本格式: [秒] [分] [小时] [日] [月] [周] [年] 序号说明是否必填允许填写的值允许使用的通配符1秒是0-59, - * /2分是0-59, - * /3小时是0-23, - * /4日是1-31, - * ? / L W5月是1-12 或 JAN-DEC, - * /6周是…

List元素互换,List元素转换下标,Java Collections.swap()方法实例解析
Java Collections.swap()方法解析 jdk源码: public static void swap(List<?> list, int i, int j) {// instead of using a raw type here, its possible to capture// the wildcard but it will require a call to a supplementary// private methodfina…

使用feign调用注解在eureka上的微服务,简单学会微服务
使用feign调用注解在eureka上的微服务。 首先,确保所有服务(调用方与被调用方)都被注册在同一个eureka服务上。 1. 在调用方添加依赖(万事第一步,加依赖) <dependency><groupId>org.springfr…

快速排查feign.FeignException: status 500 …
feign.FeignException: status 500 … 总结一下feign报500的时候快速排查问题的方法, 这个bug容易出现的地方分别为: 1. 远程调用的时候feign的注册信息有没有写错,比如少一个斜杠什么之类的 FeignClient(value "testservice",path "/newinter…

手动将web项目的class文件打成jar包,手动打jar包,java -cvf,IDE打包底层指令
手动将web项目的class文件打成jar包。 我们的项目在使用IDE进行编译后,在项目的target目录下将会生成class文件。我们可以将class文件打成jar包。 使用的到命令为: 在target目录下打开命令窗口 jar -cvf xxx.jar * 可供的选项包括: -c 创建新的归档文件…

科学处理java.lang.StackOverflowError: null异常
java.lang.StackOverflowError: null异常处理 在项目运行中出现StackOverflowError 首先要检查在编码中是否有明显的递归编码,比如死循环或者无限循环调用。 而编码中并没有出现使用递归,这时候可以查看一下表是否有关联,两个表相互关联,我…

JPA不同包下同类名查询出错
不同包下同类名查询出错 异常现象:使用JPA进行查询时,JPA的实体类映射到了另外一个包下的同名类,由于两个同名类中字段名和字段数不相同,所以会出现种种查询错误。 原因及对策:这里应该是jpa实体类默认注入问题&…

java基本类型转换,随记
java基本类型转换: double double 转 long double random Math.round(Math.random()*10000); long l new Double(random).longValue();

IDEA设置单个文件、单个包、单个项目的编码格式
IDEA设置单个文件、单个包、单个项目的编码格式 File-> Settings-> File Enclodings 选择编码格式,确定即可。 注意:此处的编码格式设定以后,该包已经存在的类内部乱码或文字不会有变化,若新复制类进入则会按照新的编码格式…

IDEA自动生成对象所有set方法
idea中有一款插件能够生成对象所有的set方法,GenerateAllSetter :下载地址 步骤1:将下载好的压缩包放在自己记得的文件夹中,在idea中进行导入 步骤2:在本地选中刚才的压缩包,导入即可。然后将IDE重启即生…

typora新增主题,typora将主题导入本地
首先,需要打开typora的偏好设置,也就是设置 点击获取主题,进入 https://theme.typora.io/ 这个网站进行下载 下载好后是一个压缩包,将压缩包解压,将其中theme文件夹下的css文件复制到主题文件夹下,主题文件…

将文件上传至ftp服务器,FTP文件上传工具类,将文件上传至服务器指定目录
将文件上传至ftp服务器,传入File对象,将文件上传至ftp服务器 需要配置修改的点: 1. 服务器ip端口(服务器ip 端口22/21)。 2. 服务器账号密码(服务器登录用户名密码)。 3. 上传路径(写入的路径会…

苹果设备iphone,ipad,macbook网络连接慢,开机开什么卡什么,一步解决
苹果电脑网络连接慢,开机开什么卡什么??? 网络上的方法一种种,没有一个适用的? 如果你的macbook也是打开就没网,但有一些软件也能用,就是浏览器加载跑条儿,不妨试试&am…