• SpringBoot 一文搞懂Spring JPA


    一文搞懂Spring JPA

    什么是 JPA

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

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

    Springboot整合SpringData JPA

    SpringData简介

    在这里插入图片描述

    整合SpringData JPA

    一、导入依赖

    		
    			org.springframework.boot
    			spring-boot-starter-data-jpa
    		
    		
    			mysql
    			mysql-connector-java
    			runtime
    		
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    二、添加配置文件

    在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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述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一样也有单向、双向之分。单向双向和注解没有关系,只看实体类之间是否相互引用。

    在这里插入图片描述在这里插入图片描述

    四、dao层

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

    在springdata jpa中,增加和修改方法都是save()
    在这里插入图片描述

    查询,方法就多了,但都是类似findxxx()
    在这里插入图片描述删除 delete()
    在这里插入图片描述

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

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    三国志14信息查询小程序(历史武将信息一览)制作更新过程06-复现小程序
    基于SpringBoot的校园志愿者管理系统
    mybatis注解开发
    [LeetCode周赛复盘] 第 321 场周赛20221127
    精品,阿里P8爆款《SpringBoot+vue全栈开发实战项目》笔记太香了
    写作一笔记
    RocketMQ-流程图-概念
    node基础概念
    【mysql版本修改】
    QT之QTableView的简介
  • 原文地址:https://blog.csdn.net/segegefe/article/details/126114228