1. 创建表

@Entity声明该类对应一个数据表实体(万事万物皆为对象)。

@Table 设置表名

@Entity
@Table(name = "user")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;省略getter/setter......
}

2. 创建主键

@Id :声明一个字段为主键。

使用@Id声明之后,可以使用 @GeneratedValue 指定主键生成策略。

使用 @GeneratedValue 指定主键生成策略的方式有两种:

1. 通过 @GeneratedValue 可以直接使用 JPA 内置提供的四种主键生成策略来指定主键生成策略。

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

JPA 使用枚举定义了 4 中常见的主键生成策略:

  • TABLETABLE:使用一个特定的数据库表格来保存主键;
  • SEQUENCE:为Oracle、PostgreSQL等不支持主键自增长的数据库提供了一种叫做“序列(sequence)"的主键生成机制;
  • IDENTITY:主键自增长;
  • AUTO:把主键生成策略交给持久化引擎,持久化引擎会根据数据库在以上三种主键生成策略中选择其中一种

@GeneratedValue 注解默认使用的策略是GenerationType.AUTO。 在关系型数据库中使用GenerationType.IDENTITY策略比较普遍一点

public @interface GeneratedValue {GenerationType strategy() default AUTO;String generator() default "";
}

一般使用 MySQL 数据库的话,使用GenerationType.IDENTITY策略比较普遍一点(分布式系统的话需要另外考虑使用分布式 ID)。

2. 通过 @GenericGenerator声明一个主键策略,然后 @GeneratedValue使用这个策略

@Id
@GeneratedValue(generator = "IdentityIdGenerator")
@GenericGenerator(name = "IdentityIdGenerator", strategy = "identity")
private Long id;

等价于:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

3. 设置字段类型

@Column 声明字段。

示例:

设置属性 userName 对应的数据库字段名为 user_name,长度为 32,非空

@Column(name = "user_name", nullable = false, length=32)
private String userName;

设置字段类型并且加默认值:

Column(columnDefinition = "tinyint(1) default 1")
private Boolean enabled;

4. 指定不持久化特定字段

@Transient :声明不需要与数据库映射的字段,在保存的时候不需要保存进数据库 。

如果我们想让secrect 这个字段不被持久化,可以使用 @Transient关键字声明。

Entity(name="USER")
public class User {......@Transientprivate String secrect; // not persistent because of @Transient}

除了 @Transient关键字声明, 还可以采用下面几种方法:

static String secrect; // not persistent because of static
final String secrect = “Satish”; // not persistent because of final
transient String secrect; // not persistent because of transient

一般使用注解的方式比较多。

5. 声明大字段

@Lob:声明某个字段为大字段。

@Lob
private String content;

更详细的声明:

@Lob
//指定 Lob 类型数据的获取策略, FetchType.EAGER 表示非延迟 加载,而 FetchType. LAZY 表示延迟加载 ;
@Basic(fetch = FetchType.EAGER)
//columnDefinition 属性指定数据表对应的 Lob 字段类型
@Column(name = "content", columnDefinition = "LONGTEXT NOT NULL")
private String content;

6. 创建枚举类型的字段

可以使用枚举类型的字段,不过枚举字段要用@Enumerated注解修饰。

public enum Gender {MALE("男性"),FEMALE("女性");private String value;Gender(String str){value=str;}
}
@Entity
@Table(name = "role")
public class Role {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String description;@Enumerated(EnumType.STRING)private Gender gender;省略getter/setter......
}

数据库里面对应存储的是 MAIL/FEMAIL。

7. 增加审计功能

在 JPA 中,支持在字段或者方法上进行注解@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy 实现对数值设置的时间控制。

首先需要通过@EnableJpaAuditing开启 JPA 审计功能。其中,

  • @CreatedDate:表示该字段为创建时间,在这个实体被 insert 的时候,会设置值
  • @CreatedBy :表示该字段为创建人,在这个实体被 insert 的时候,会设置值
  • @LastModifiedDate:表示该字段为最终修改时间
  • ``@LastModifiedBy`:表示该字段为最终修改人

8. 删除/修改数据

@Modifying 注解提示 JPA 该操作是修改操作,注意还要配合@Transactional注解使用。

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {@Modifying@Transactional(rollbackFor = Exception.class)void deleteByUserName(String userName);
}

9. 关联关系

  • @OneToOne 声明一对一关系
  • @OneToMany 声明一对多关系
  • @ManyToOne声明多对一关系
  • MangToMang声明多对多关系

Spring Data JPA 常用注解相关推荐

  1. spring data JPA常用注解

    常用注解 @Entity 作用:指定当前类是实体类. @Table 作用:指定实体类和表之间的对应关系. 属性: name:指定数据库表的名称 @ld 作用:指定当前字段是主键. @Generated ...

  2. spring data jpa常用配置

    spring.jpa.hibernate.ddl-auto 首次程序运行时对ddl的操作 create: 每次运行该程序,没有表格会新建表格,表内有数据会清空: create-drop: 每次程序结束 ...

  3. Spring Data JPA OneToMany注解参数orphanRemoval,一对多删除详解

    博主:爱码叔 个人博客站点: icodebook 公众号:漫话软件设计 专注于软件设计与架构.技术管理.擅长用通俗易懂的语言讲解技术.对技术管理工作有自己的一定见解.文章会第一时间首发在个站上,欢迎大 ...

  4. JPA: Spring Data JPA @OneToMany 注解参数 orphanRemoval,一对多删除详解

    分析了OneToMany级联操作多方的插入.更新.删除.我们得到如下结论: 1.插入,建议一方设置mappedBy,好处是只会执行一条insert语句.不会执行多余的update外键的sql. 2.更 ...

  5. Spring data JPA 笔记

    一.spring data jpa 常用注解 1.  @Entity  :标识实体类是JPA实体,告诉JPA在程序运行时生成实体类对应表 2.  @Table  :设置实体类在数据库所对应的表名 3. ...

  6. Spring Boot 、Spring Data JPA、Hibernate集成

    ###什么是JPA JPA是用于管理Java EE 和Java SE环境中的持久化,以及对象/关系映射的JAVA API 最新规范为"JSR 338:Java Persistence 2.1 ...

  7. Spring Data JPA问题汇总

    刚进公司,发现都用的Spring Data JPA,一脸懵,知乎上遇到了一个大佬写的文章,非常详细,分享一下,我把大佬的文章整理了一下格式,比较好看了,原文链接:https://zhuanlan.zh ...

  8. Spring Data Jpa出现Not supported for DML operations

    问题描述:在使用Spring Data Jpa的注解形式去配置删除sql语句,出现了下述异常: org.springframework.dao.InvalidDataAccessApiUsageExc ...

  9. Spring data Jpa,Mybatis,读写锁,@Lock 使用

    Spring data jpa 支持注解式的读写锁(悲观锁),实际上这个东西硬编码也简单,但是基于Jpa 命名方式定义的Sql,只能用注解添加支持读写锁了, 不了解读写锁的可以点这里 mysql读写锁 ...

最新文章

  1. in the java search_Search API – Using scrolls in Java - Elasticsearch Java API 手册
  2. 远场语音识别,性能提升 30%,百度怎么做到的?
  3. UISwipeGestureRecognizer 左右事件捕捉
  4. 高级C语言教程-指针和存储
  5. 《ASCE1885的源码分析》の基于完成端口模型的TCP服务器框架
  6. Boost:以协程的方式实现重构echo服务器的实例
  7. 最小生成树基础 (Kruskal)
  8. 计算机网络路由器是什么东西,路由器是什么
  9. android任意函数绘制_图片和图形 | 可绘制对象概览
  10. matlab制作科学计算器,MATLAB科学计算器设计
  11. 2022创业基础——李家华等章节测试答案以及期末考试答案
  12. 视频截帧 php,php截取视频指定帧为图片_PHP
  13. lcd1602c语言程序分析,51单片机驱动LCD1602程序设计(C语言).doc
  14. 美团外卖与饿了么竞品分析
  15. 批量下载Landsat快视图,为批量下载Landsat Level1数据做准备
  16. Ubuntu系统下 .7z 文件压缩解压命令
  17. Verilog四位全加器
  18. 《Unity编辑器》截图记录Unity好看的编辑器样式
  19. 2021年最新无痛低操作IDEA导入gitee项目方法
  20. HDU-2196Computer 树形DP-经典题

热门文章

  1. 软考高项之范围管理-攻坚记忆
  2. Linux脚本之定时清空文件内容
  3. java泛型机制的好处_java 泛型机制
  4. openstack云主机无法绑定ip_智汇华云|OpenStack 虚拟机 GPU 性能优化
  5. split命令--linux切割(拆分)文件
  6. Linux命令行性能检测工具
  7. dede后台title怎么修改的?去掉XXXX-织梦内容管理系统V5.7
  8. 面向对象——构造方法(重载)
  9. Android 短信模块分析(四) MMS之短信的发送与接收
  10. ApplicationListener,Game,Screen,Stage,Actor,Group