当前位置: 首页 > news >正文

java jpa 注解_Spring Data JPA 中常用注解

一、java对象与数据库字段转化

1.@Entity:标识实体类是JPA实体,告诉JPA在程序运行时生成实体类对应表

2.@Table:设置实体类在数据库所对应的表名

3.@Id:标识类里所在变量为主键

4.@GeneratedValue:设置主键生成策略,此方式依赖于具体的数据库

5.@Basic:表示简单属性到数据库表字段的映射(几乎不用)

6.@Column:表示属性所对应字段名进行个性化设置

7.@Transient:表示属性并非数据库表字段的映射,ORM框架将忽略该属性

8.@Temporal:(很重要)

当我们使用到java.util包中的时间日期类型,则需要此注释来说明转化成java.util包中的类型。

注入数据库的类型有三种:

TemporalType.DATE(2008-08-08)

TemporalType.TIME(20:00:00)

TemporalType.TIMESTAMP(2008-08-08 20:00:00.000000001)

9.@Enumerated:(很重要)

使用此注解映射枚举字段,以String类型存入数据库

注入数据库的类型有两种:EnumType.ORDINAL(Interger)、EnumType.STRING(String)

10.@Embedded、@Embeddable:

当一个实体类要在多个不同的实体类中进行使用,而其不需要生成数据库表

@Embeddable:注解在类上,表示此类是可以被其他类嵌套

@Embedded:注解在属性上,表示嵌套被@Embeddable注解的同类型类

11.@ElementCollection:集合映射

12.@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy:(很重要)

表示字段为创建时间字段(insert自动设置)、创建用户字段(insert自动设置)、最后修改时间字段(update自定设置)、最后修改用户字段(update自定设置)

用法:

1、@EntityListeners(AuditingEntityListener.class):申明实体类并加注解

2、@EnableJpaAuditing:在启动类中加此注解

3、在实体类中属性中加上面四种注解

4、自定义添加用户

48304ba5e6f9fe08f3fa1abda7d326ab.png

importorg.springframework.context.annotation.Configuration;importorg.springframework.data.domain.AuditorAware;importorg.springframework.security.core.context.SecurityContext;importorg.springframework.security.core.context.SecurityContextHolder;

@Configuration

public class UserIDAuditorBean implements AuditorAware{

@OverridepublicLong getCurrentAuditor() {

SecurityContext ctx=SecurityContextHolder.getContext();if (ctx == null) {return null;

}if (ctx.getAuthentication() == null) {return null;

}if (ctx.getAuthentication().getPrincipal() == null) {return null;

}

Object principal=ctx.getAuthentication().getPrincipal();if (principal.getClass().isAssignableFrom(Long.class)) {return(Long) principal;

}else{return null;

}

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

13.@MappedSuperclass:(很重要)

实现将实体类的多个属性分别封装到不同的非实体类中

注解的类将不是完整的实体类,不会映射到数据库表,但其属性将映射到子类的数据库字段

注解的类不能再标注@Entity或@Table注解,也无需实现序列化接口

注解的类继承另一个实体类 或 标注@MappedSuperclass类,他可使用@AttributeOverride 或 @AttributeOverrides注解重定义其父类属性映射到数据库表中字段。

二、java对象与json转化

1.@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8"):将Date属性转换为String类型, timezone解决(相差8小时)

2.@JsonSerialize:作用在类或字段上,转化java对象到json格式(需自定义转化类继承JsonSerializer)

48304ba5e6f9fe08f3fa1abda7d326ab.png

class DateSerializer extends JsonSerializer{

@Override

public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider)

throws IOException {

SimpleDateFormat formatter = new SimpleDateFormat(BankAccount.DATE_PATTERN);

jgen.writeString(formatter.format(value));

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

3.@JsonDeserialize:作用在类或字段上,转化json格式到java对象(需自定义转化类继承JsonDeserializer)

48304ba5e6f9fe08f3fa1abda7d326ab.png

class DateDeSerializer extends JsonDeserializer{

@Override

public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {

Date date;

try {

date = DateUtils.parseDate(jp.getText(), BankAccount.DATE_PATTERN);

} catch (Exception e) {

return null;

}

return date;

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

4.@JsonProperty:作用在属性上,把属性名称序列化为另一个名称(trueName属性序列化为name)

5.@JsonIgnoreProperties(ignoreUnknown = true):作用在类上,忽略掉json数据里包含了实体类没有的字段

6.@JsonIgnore:在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响

相关文章:

  • 奋斗在当下
  • java onmouseover_[Java教程]关于onmouseover和onmouseout的bug
  • java中方法前面必须使用类名吗_java中可以直接对类名进行引用吗?
  • 博大精深!
  • java实现仿射密码_java实现仿射密码加密解密
  • IPv4单播地址
  • 几个IPv4地址类型术语
  • mysql 模拟 数据库阻塞_[数据库]MySQL 5.6中如何定位DDL被阻塞的问题
  • 感谢Thom
  • 安卓 java 卡_安卓机为什么越用越卡?疯狂堆配置的背后到底隐藏着什么?
  • 如何把普通应用程序添加到系统服务(其他方法持续增加中)
  • 基于java酒店管理系统_课内资源 - 基于JAVA实现的互联网酒店管理系统
  • 在win2000下配置php,cgi,asp运行环境
  • 传统java io_Java IO编程全解(二)——传统的BIO编程
  • 喝啤酒可测出性格
  • 自己简单写的 事件订阅机制
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【知识碎片】第三方登录弹窗效果
  • Debian下无root权限使用Python访问Oracle
  • Flex布局到底解决了什么问题
  • go append函数以及写入
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • leetcode46 Permutation 排列组合
  • Mysql优化
  • Redis字符串类型内部编码剖析
  • Spark RDD学习: aggregate函数
  • SQLServer之创建数据库快照
  • vue.js框架原理浅析
  • 半理解系列--Promise的进化史
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 前端性能优化--懒加载和预加载
  • 使用 @font-face
  • 我的业余项目总结
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 一个SAP顾问在美国的这些年
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 第二十章:异步和文件I/O.(二十三)
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • $(function(){})与(function($){....})(jQuery)的区别
  • (02)Hive SQL编译成MapReduce任务的过程
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (a /b)*c的值
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (Git) gitignore基础使用
  • (TOJ2804)Even? Odd?
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十八)SpringBoot之发送QQ邮件
  • (转)JAVA中的堆栈
  • .NET : 在VS2008中计算代码度量值
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .Net MVC + EF搭建学生管理系统
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?