SpringBoot 一文搞懂Spring JPA

一文搞懂Spring JPA

什么是 JPA

spirng data jpa是spring提供的一套简化JPA开发的框架,按照约定好的【方法命名规则】写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查询等等。

Spring Data JPA 可以理解为 JPA 规范的再次封装抽象,底层还是使用了 Hibernate 的 JPA 技术实现。

Springboot整合SpringData JPA

SpringData简介

SpringBoot 一文搞懂Spring JPA_第1张图片

整合SpringData JPA

一、导入依赖

		
			org.springframework.boot
			spring-boot-starter-data-jpa
		
		
			mysql
			mysql-connector-java
			runtime
		

二、添加配置文件

在application.yml中添加datasource配置,或者

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=utf-8
    username: root
    password: 123456
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

SpringBoot 一文搞懂Spring JPA_第2张图片hibernate.hbm2ddl.auto 参数的作用主要用于:自动创建、更新、验证数据库表结构,有四个值。
create:每次加载 Hibernate 时都会删除上一次生成的表,然后根据 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
create-drop:每次加载 Hibernate 时根据 model 类生成表,但是 sessionFactory 一关闭,表就自动删除。
update:最常用的属性,第一次加载 Hibernate 时根据 model 类会自动建立起表的结构(前提是先建立好数据库),以后加载 Hibernate 时根据 model 类自动更新表结构,即使表结构改变了,但表中的行仍然存在,不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。
validate :每次加载 Hibernate 时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

三、配置一个javabean去对应和一张表对应

javax.persistence
虽然Spring Data JPA已经帮我们对数据的操作封装得很好了, 约定大于配置思想,帮我们默认了很多东西。
JPA(Java持久性API) 是存储业务实体关联的实体来源。它显示了如何定义一个面向普通 Java对象(POJO)作为一个实体,以及如何与管理关系实体提供一套 标准。因此,javax.persistence下面的有些注解还是必须要去了解 的,以便于更好地提高工作效率。

具体详见

https://blog.csdn.net/yangzhiwei273/article/details/115373747

基本注解包括@Entity、@Table、@Id、@IdClass、@GeneratedValue、@Basic、@Transient、@Column、@Temporal、 @Enumerated、@Lob。

@Entity定义对象将会成为被JPA管理的实体,将映射到指定的数据库表。
@Table指定数据库的表名。
@Id定义属性为数据库的主键,一个实体里面必须有一个。
@IdClass利用外部类的联合主键。
@GeneratedValue为主键生成策略
@Basic表示属性是到数据库表的字段的映射。如果实体的字段上没有任何注解,默认即为@Basic。
@Transient表示该属性并非一个到数据库表的字段的映射,表示非持久化属性,与@Basic作用相反。JPA映射数据库的时候忽略它。
@Column定义该属性对应数据库中的列名。
@Temporal用来设置Date类型的属性映射到对应精度的字段。
@Lob 将属性映射成数据库支持的大对象类型,支持以下两种数据库类型的字段。

关联关系注解
@JoinColumn定义外键关联的字段名称
@OneToOne关联关系
@OneToMany与@ManyToOne可以相对存在,也可只存在一方。
@ManyToMany表示多对多,和@OneToOne、@ManyToOne一样也有单向、双向之分。单向双向和注解没有关系,只看实体类之间是否相互引用。

SpringBoot 一文搞懂Spring JPA_第3张图片SpringBoot 一文搞懂Spring JPA_第4张图片

四、dao层

 CrudRepository接口,主要是完成一些增删改查的操作。
SpringBoot 一文搞懂Spring JPA_第5张图片这是最简单的使用了,其实这里关键是Dao到底可以用哪些方法,截了一下图,大概可以看到基本的crud方法应该是都实现了,你只需要传入相关的参数即可。

在springdata jpa中,增加和修改方法都是save()
SpringBoot 一文搞懂Spring JPA_第6张图片

查询,方法就多了,但都是类似findxxx()
SpringBoot 一文搞懂Spring JPA_第7张图片删除 delete()
SpringBoot 一文搞懂Spring JPA_第8张图片

接下来就是service层和controller层了,可以开始测试数据库代码了。

你可能感兴趣的:(java,spring,spring,boot,hibernate)