百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

简单才是王道:Spring Data JPA 极简教程

ccwgpt 2024-09-21 13:43 26 浏览 0 评论

之前介绍了Mybatis数据库ORM框架,也介绍了使用Spring Boot 的jdbcTemplate 操作数据库。其实Spring Boot 还有一个非常实用的数据操作框架:Spring Data JPA。

Spring Data JPA 是Spring Data框架下的一个基于JPA标准操作数据的模块,简化了操作持久层的代码,只需要编写接口就可以。如果你是第一次使用 Spring Data JPA ,你一定会惊呼这东西简直就是神器,几乎不需要写什么关于数据库访问的代码,就能完整的实现 CURD 的全部功能,使用非常简单方便。下面我们就来讲述 JPA 使用的基本操作。


一、Spring Data JPA介绍

JPA (Java Persistence API), Java持久层 API的简称,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中,JPA是一个基于O/R映射的标准规范。

JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。主要包括括以下3方面的技术:

  1. ORM映射元数据 将实体对象持久化到数据库表中
  2. API,用来操作实体对象,执行CRUD操作
  3. 查询语言,通过面向对象,而非面向数据库的查询语言查询数据

Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率。

SpringData:其实Spring Data 就是Spring提供了一个操作数据的框架。而Spring Data JPA只是Spring Data框架下的一个基于JPA标准操作数据的模块。


二、SpringBoot整合SpringData JPA

1、增加JPA的相关依赖

在pom.xml 中,增加如下配置:

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

注意,需要添加MySql驱动。


2、修改配置文件

需要在application.properties 中配置数据源和jpa的基本的相关属性,具体如下:

#数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/zwz_test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#jpa配置
spring.jpa.properties.hibernate.hbm2ddl.auto=create
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
#SQL 输出
spring.jpa.show-sql=true
#format 下 SQL 进输出
spring.jpa.properties.hibernate.format_sql=true

参数设置说明

  1、spring.jpa.properties.hibernate.hbm2ddl.auto: 配置实体类维护数据库表结构的具体行为。

  • update:最常用的属性,表示当实体类的属性发生变化时,表结构跟着更新;
  • create:表示启动的时候删除上一次生成的表,并根据实体类重新生成表,这个时候之前表中的数据就会被清空;
  • create-drop:表示启动时根据实体类生成表,但是当sessionFactory关闭的时候表会被删除;
  • validate:表示启动时验证实体类和数据表是否一致;
  • none:则什么都不做。

  2、spring.jpa.show-sql :表示hibernate在操作的时候在控制台打印真实的sql语句,方便调试。

  3、spring.jpa.properties.hibernate.format_sql:表示格式化输出的json字符串,方便查看。

  4、spring.jpa.properties.hibernate.dialect:指定?成表名的存储引擎为 InneoDB


3、数据库实体类

数据库实体类是一个 POJO Bean 对象。定义实体类后,在项目启动时,系统会根据实体类创建对应的数据表,实体类如下:

package com.weiz.pojo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * 用户实体类
 *
 * @author
 * @since
 */
@Entity
@Table(name = "Users")
public class Users {
    @Id
    private Long id;

    @Column(length = 32)
    private String name;

    @Column(length = 32)
    private String account;

    @Column(length = 64)
    private String pwd;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
}

代码说明

  @Entity:必选的注解,声明这个类对应了一个数据库表。  

@Table:可选的注解。声明了数据库实体对应的表信息。包括表名称、索引信息等。这里声明这个实体类对应的表名是 Users。如果没有指定,则表名和实体的名称保持一致,跟@Entity 注解配合使用。  

@Id注解:声明了实体唯一标识对应的属性。  

@Column注解:用来声明实体属性的表字段的定义。默认的实体每个属性都对应了表的一个字段。字段的名称默认和属性名称保持一致(并不一定相等)。字段的类型根据实体属性类型自动推断。这里主要是声明了字符字段的长度。如果不这么声明,则系统会采用 255 作为该字段的长度。


以上就是整合jpa的全部配置,配置完之后,启动项目,我们就可以看到日志中如下的内容:


同时,连上数据库之后,可以看到Users 表也创建成功了。


三、定义Repository

项目整合 jpa 成功之后,接下来可以定义Repository 数据访问接口了,只需要继承 JpaRepository 类,就会帮我们自动生成很多内置方法,如下:

package com.weiz.dao;

import com.weiz.pojo.Users;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRespository extends JpaRepository<Users, Long> {

}

上面的代码可以看到,我们基本上一行代码也不用写,就能实现Users 用户的增删改查等全部的方法。


四、测试调用

上面,我们创建了UserRespository 数据接口,接下来就来调用该接口实现简单的增删改查。

package com.weiz.controller;

import com.weiz.dao.UserRespository;
import com.weiz.pojo.Users;
import com.weiz.utils.JSONResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Optional;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserRespository userRespository;

    @RequestMapping("/save")
    public JSONResult save(){
        Users user = new Users();
        user.setId((long) 1);
        user.setName("spring boot jpa");
        user.setPwd("123456");
        userRespository.save(user);
        return JSONResult.ok("保存成功");
    }

    @RequestMapping("/update")
    public JSONResult update() {
        Users user = new Users();
        user.setId((long) 1);
        user.setName("spring boot jpa update");
        user.setPwd("123456");
        user.setAccount("sbj");
        userRespository.save(user);
        return JSONResult.ok("修改成功");
    }

    @RequestMapping("/delete")
    public JSONResult delete() {
        Users user = new Users();
        user.setId((long) 1);
        userRespository.delete(user);
        return JSONResult.ok("删除成功");
    }

    @RequestMapping("/select")
    public JSONResult select() {
        Optional<Users> users = userRespository.findById((long) 1);
        return JSONResult.ok(users);
    }
}

以上的controller 就是简单的调用增删改查的方法。增加了对应的controller 之后,启动项目即可测试用户的增删改查功能。这里就不一一截图了。


最后

以上就实现了spring boot 整合 jpa 操作数据库,是不是特别简单,整个过程我们所做的仅仅上面简单的四步:

1、增加jpa的依赖

2、在配置文件中里面增加数据库配置信息。

3、声明一个 Users 的数据库实体对象。

4、声明了一个持久层的接口,继承JpaRepository<T, ID> 接口。

这样,整个用户管理模块的增加、删除、修改、查询功能就实现了,甚至还有排序和分页的功能。

这就是 JPA 的强大之处。除了这些接口外,用户还会有其他的一些自定义的查询需求, JPA 也一样可以满足你的需求。

这个系列课程的完整源码,也会提供给大家。大家私信我(章为忠学架构),回复:springboot源码 ,获取这个系列课程的完整源码。


推荐阅读:

Spring Boot 整合mybatis,使用注解的方式(自动生成注解)

Spring Boot 使用JdbcTemplate操作数据库,配置多数据源

Spring Boot入门系列(六)使用pagehelper实现分页

Spring Boot入门系列(十五)Spring Boot 开发环境热部署的配置

相关推荐

团队管理“布阵术”:3招让你的团队战斗力爆表!

为何古代军队能够以一当十?为何现代企业有的团队高效似“特种部队”,有的却松散若“游击队”?**答案正隐匿于“布阵术”之中!**今时今日,让我们从古代兵法里萃取3个核心要义,助您塑造一支战斗力爆棚的...

知情人士回应字节大模型团队架构调整

【知情人士回应字节大模型团队架构调整】财联社2月21日电,针对原谷歌DeepMind副总裁吴永辉加入字节跳动后引发的团队调整问题,知情人士回应称:吴永辉博士主要负责AI基础研究探索工作,偏基础研究;A...

豆包大模型团队开源RLHF框架,训练吞吐量最高提升20倍

强化学习(RL)对大模型复杂推理能力提升有关键作用,但其复杂的计算流程对训练和部署也带来了巨大挑战。近日,字节跳动豆包大模型团队与香港大学联合提出HybridFlow。这是一个灵活高效的RL/RL...

创业团队如何设计股权架构及分配(创业团队如何设计股权架构及分配方案)

创业团队的股权架构设计,决定了公司在随后发展中呈现出的股权布局。如果最初的股权架构就存在先天不足,公司就很难顺利、稳定地成长起来。因此,创业之初,对股权设计应慎之又慎,避免留下巨大隐患和风险。两个人如...

消息称吴永辉入职后引发字节大模型团队架构大调整

2月21日,有消息称前谷歌大佬吴永辉加入字节跳动,并担任大模型团队Seed基础研究负责人后,引发了字节跳动大模型团队架构大调整。多名原本向朱文佳汇报的算法和技术负责人开始转向吴永辉汇报。简单来说,就是...

31页组织效能提升模型,经营管理团队搭建框架与权责定位

分享职场干货,提升能力!为职场精英打造个人知识体系,升职加薪!31页组织效能提升模型如何拿到分享的源文件:请您关注本头条号,然后私信本头条号“文米”2个字,按照操作流程,专人负责发送源文件给您。...

异形柱结构(异形柱结构技术规程)

下列关于混凝土异形柱结构设计的说法,其中何项正确?(A)混凝土异形柱框架结构可用于所有非抗震和抗震设防地区的一般居住建筑。(B)抗震设防烈度为6度时,对标准设防类(丙类)采用异形柱结构的建筑可不进行地...

职场干货:金字塔原理(金字塔原理实战篇)

金字塔原理的适用范围:金字塔原理适用于所有需要构建清晰逻辑框架的文章。第一篇:表达的逻辑。如何利用金字塔原理构建基本的金字塔结构受众(包括读者、听众、观众或学员)最容易理解的顺序:先了解主要的、抽象的...

底部剪力法(底部剪力法的基本原理)

某四层钢筋混凝土框架结构,计算简图如图1所示。抗震设防类别为丙类,抗震设防烈度为8度(0.2g),Ⅱ类场地,设计地震分组为第一组,第一自振周期T1=0.55s。一至四层的楼层侧向刚度依次为:K1=1...

结构等效重力荷载代表值(等效重力荷载系数)

某五层钢筋混凝土框架结构办公楼,房屋高度25.45m。抗震设防烈度8度,设防类别丙类,设计基本地震加速度0.2g,设计地震分组第二组,场地类别为Ⅱ类,混凝土强度等级C30。该结构平面和竖向均规则。假定...

体系结构已成昭告后世善莫大焉(体系构架是什么意思)

实践先行也理论已初步完成框架结构留余后人后世子孙俗话说前人栽树后人乘凉在夏商周大明大清民国共和前人栽树下吾之辈已完成结构体系又俗话说青出于蓝而胜于蓝各个时期任务不同吾辈探索框架结构体系经历有限肯定发展...

框架柱抗震构造要求(框架柱抗震设计)

某现浇钢筋混凝土框架-剪力墙结构高层办公楼,抗震设防烈度为8度(0.2g),场地类别为Ⅱ类,抗震等级:框架二级,剪力墙一级,混凝土强度等级:框架柱及剪力墙C50,框架梁及楼板C35,纵向钢筋及箍筋均采...

梁的刚度、挠度控制(钢梁挠度过大会引起什么原因)

某办公楼为现浇钢筋混凝土框架结构,r0=1.0,混凝土强度等级C35,纵向钢筋采用HRB400,箍筋采用HPB300。其二层(中间楼层)的局部平面图和次梁L-1的计算简图如图1~3(Z)所示,其中,K...

死要面子!有钱做大玻璃窗,却没有钱做“柱和梁”,不怕房塌吗?

活久见,有钱做2层落地大玻璃窗,却没有钱做“柱子和圈梁”,这样的农村自建房,安全吗?最近刷到个魔幻施工现场,如下图,这栋5开间的农村自建房,居然做了2个全景落地窗仔细观察,这2个落地窗还是飘窗,为了追...

不是承重墙,物业也不让拆?话说装修就一定要拆墙才行么

最近发现好多朋友装修时总想拆墙“爆改”空间,别以为只要避开承重墙就能随便砸!我家楼上邻居去年装修,拆了阳台矮墙想扩客厅,结果物业直接上门叫停。后来才知道,这种配重墙拆了会让阳台承重失衡,整栋楼都可能变...

取消回复欢迎 发表评论: