前言

1. 三者的区别与联系

JPA:本身是一种ORM规范,不是ORM框架.由各大ORM框架提供实现.

Hibernate是一个完整的ORM框架,常规CRUD我们不需要写一句SQL;框架比较重,学习成本比较高。

MyBatis 并不是一个完整的ORM框架,因为我们还需要自己去写全部SQL;轻量级框架,学习成本低,性能好控制。不能自动建表。

市场上的主流的JPA框架(实现者)有:

Hibernate (JBoos)、EclipseTop(Eclipse社区)、OpenJPA (Apache基金会)。

jpa 是规范

hibernate实现了这个规范

spring data jpa对hibernate进行了封装,底层使用的hibernate

2. JPA 的使用介绍:

JPA 自动建表更新字段 + MyBatis 对于SQL编写 。JPA 自动建表只是在Entity中。

maven引入

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

2.1 常用注解:

2.1.1类上的注释:

@Entity

@Entity说明这个class是实体类,并且使用默认的orm规则,即class名即数据库表中表名,class字段名即表中的字段名,如果想改变这种默认的orm规则,就要使用@Table来改变class名与数据库中表名的映射规则

@Entity(name = "表名")

@Table

@Table改变class名与数据库中表名的映射规则。

@Table(indexes={@Index(columnList="parentCode")})

@Table(uniqueConstraints={@UniqueConstraint(columnNames={"name"})})

uniqueConstraints 设置唯一键约束

如果是联合约束就用下面这种

@Table(name="tbl_sky",
uniqueConstraints = {@UniqueConstraint(columnNames={"month", "day"})}) 如果是单一字段约束可以用 @Table(name="tbl_sky",
uniqueConstraints = {@UniqueConstraint(columnNames="month")})

总结:如果只是想定义表使用@Entity就可以,如果想加约束@Entity 和@Table 配合使用

@Embeddable 用于将实体嵌入到另一个实体。

在使用实体类生成对应的数据库表时,很多的时候都会遇到这种情况:在一个实体类中引用另外的实体类,一般遇上这种情况,我们使用@OneToOne、@OneToMany、@ManyToOne、@ManyToMany这4个注解比较多,但是好奇害死猫,除了这四个有没有别的使用情况,尤其是一个实体类要在多个不同的实体类中进行使用,而本身又不需要独立生成一个数据库表,这就是需要@Embedded、@Embeddable的时候了。

@MappedSuperclass

标识在父类上面,可以将变量隐藏到子类中并映射到数据库。(子类继承父类定义的字段)

2.1.2字段上的注释:

@Id

@Id注释用于将Java字段标记为数据库表主键列

@GeneratedValue 设置主键的生成策略 默认SpringBoot的@GeneratedValue 是不需要加参数的

strategy属性:提供四种值:

-AUTO主键由程序控制, 是默认选项 ,不设置就是这个

-IDENTITY 主键由数据库生成, 采用数据库自增长, Oracle不支持这种方式

-SEQUENCE 通过数据库的序列产生主键, MYSQL 不支持

-Table 提供特定的数据库产生主键, 该方式更有利于数据库的移植

@Column

@Column注释表示物理数据库列的特定特征。

默认情况下,JPA使用字段名作为数据库表列名。我们可以使用Column注释来更改默认值。如实例将test作为列名称

@Column(name="test")

也可以使用@Column(length=10) 设置长度

@Column(columnDefinition = "VARCHAR(10) default 0")

当将Java float或double值映射到数据库表列时,我们可以设置数字类型列的精度尺度。以下代码将浮点值映射到具有精度8和尺度2的数据库表列。

@Column(precision=8, scale=2)
private float hourlyRate;

我们可以设置映射列是否可以具有空值或者列是否应该具有唯一值。

@Column(unique=true, nullable=false)
private String name;

@Temporal日期的定义格式,我们可以使用以下代码将Java Date类型值映射到TIMESTAMP类型数据库表列。

@Temporal(TemporalType.TIMESTAMP)
private Date dob;

@Transient如果我们不想将属性保存到数据库,我们可以使用@Transient注释标记该字段。

介绍了使用JPA来建表,那么 DAO 层的接口也是可以使用JPA的,暂时不拓展了。

2.2 SpringBoot 配置文件中的配置:

spring.jpa.hibernate.ddl-auto: update // 加载hibernate自动更新数据库结构

spring.jpa.show-sql=true 打印sql语句

// 命名策略 Hibernate5之前

命名策略采用naming-strategy配置项

//配置值org.hibernate.cfg.ImprovedNamingStrategy表名,字段为小写,当有大写字母的时候会添加下划线分隔符号,如:user_id。

spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy

Hibernate5之后
采用implicit-strategy和physical-strategy两个配置项分别控制命名策略
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

设置数据库方言:告诉Hibernate应用程序的底层即将使用哪种数据库——这就是数据库方言。

SpringDataJPA 入门的更多相关文章

  1. SpringDataJpa入门案例及查询详细解析

    SpringDataJpaSpring Data JPA 让我们解脱了DA0层的操作,基本上所有CRUD都可以依赖于它来实现,在实际的工作工程中,推荐使用Spring Data JPA+ORM(如:h ...

  2. SpringDataJPA入门就这么简单

    一.SpringData入门 在上次学SpringBoot的时候,那时候的教程就已经涉及到了一点SpringData JPA的知识了.当时还是第一次见,觉得也没什么大不了,就是封装了Hibernate ...

  3. SpringDataJPA入门2

    SpringDataJPA实体概述 JPA提供了一种简单高效的方式来管理Java对象(POJO)到关系型数据库的映射,此类Java对象成为JPA实体或简称实体.实体通常与底层数据库中的单个关系表相关联 ...

  4. Spring Data JPA 初体验

    一,JPA相关的概念 JPA概述 全称是:JavaPersistence API.是SUN公司推出的一套基于ORM的规范. Hibernate框架中提供了JPA的实现. JPA通过JDK 5.0注解或 ...

  5. spring-data-jpa快速入门(一)——整合阿里Druid

    一.概述 官网:https://projects.spring.io/spring-data-jpa/ 1.什么是spring-data-jpa Spring Data JPA, part of th ...

  6. 项目一:项目第二天 Jquery ztree使用展示菜单数据 2、 基础设置需求分析 3、 搭建项目框架环境--ssh(复习) 4、 SpringData-JPA持久层入门案例(重点) 5、 Easyui menubutton菜单按钮使用 6、 Easyui messager消息框使用

    1. Jquery ztree使用展示菜单数据 2. 基础设置需求分析 3. 搭建项目框架环境--ssh(复习) 4. SpringData-JPA持久层入门案例(重点) 5. Easyui menu ...

  7. 【spring boot】9.spring boot+spring-data-jpa的入门使用,实现数据持久化

    spring-data-jpa官方使用说明文档:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/ spring-d ...

  8. SpringBoot入门系列~Spring-Data-JPA自动建表

    1.pom.xml引入Spring-Data-Jpa和mysql依赖 <!-- Spring-data-jpa依赖 --> <dependency> <groupId&g ...

  9. SpringDataJPA快速入门

    访问我的博客 前言 之前在学习 SpringBoot 框架的时候,使用到了 SpringData JPA,但是当时只是简单的查询,没有用到稍微复杂的查询. JPA 的 JPQL 语法规则对于简单的查询 ...

随机推荐

  1. 使用 Nginx 在 Linux 上托管 ASP.NET Core

    server { listen 80; server_name example.com *.example.com; location / { proxy_pass http://localhost: ...

  2. [视频] FFMpeg 基本组成和入门示例

    目录 FFmpeg基本组成 编解码工具 ffmpeg.exe ffmpeg.exe的工作流程 播放器 ffplay.exe 多媒体分析器 ffprobe FFmpeg基本组成 AVFormat 封装了 ...

  3. Python 是什么语言

    Python 是 解释型语言,强类型定义语言,动态类型定义语言 编译型语言 & 解释型语言 编译型语言:代码在执行前,需要编译(成机器语言文件,如 .exe 文件):以后再运行时,直接使用编译 ...

  4. kubernetes实战-交付dubbo服务到k8s集群(二)交付jenkins到k8s集群

    首先下载jenkins镜像并上传到我们自己的私有仓库:7-200 # docker pull jenkins/jenkins:2.190.3 # docker tag 22b8b9a84dbe har ...

  5. Java 并发机制底层实现 —— volatile 原理、synchronize 锁优化机制

    本书部分摘自<Java 并发编程的艺术> 概述 相信大家都很熟悉如何使用 Java 编写处理并发的代码,也知道 Java 代码在编译后变成 Class 字节码,字节码被类加载器加载到 JV ...

  6. nodejs非安装版配置(windows)

    nodejs官网下载地址: https://nodejs.org/en/download/ 解压到本地并配置环境变量 在环境变量path中新增 D:\develop\node 查看是否配置成功 至此n ...

  7. 这些不可不知的JVM知识,我都用思维导图整理好了

    JVM是面试中必问的部分,本文通过思维导图以面向面试的角度整理JVM中不可不知的知识. 先上图: 1.JVM基本概念 1.1.JVM是什么 JVM 的全称是 「Java Virtual Machine ...

  8. Linux内核实现透视---软中断&Tasklet

    软中断 首先明确一个概念软中断(不是软件中断int n).总来来说软中断就是内核在启动时为每一个内核创建了一个特殊的进程,这个进程会不停的poll检查是否有软中断需要执行,如果需要执行则调用注册的接口 ...

  9. iPhone 如何查看 Wi-Fi 密码

    iPhone 如何查看 Wi-Fi 密码 shit, 需要安装第三方软件 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问! 原创文 ...

  10. DB-Engines Ranking : Redis, MongoDB, MySQL

    DB-Engines Ranking http://db-engines.com/en/ranking The DB-Engines Ranking ranks database management ...