详解SpringBoot中使用JPA作为数据持久化框架

 更新时间:2023年03月17日 14:36:29   作者:Asurplus  
这篇文章主要介绍了SpringBoot中使用JPA作为数据持久化框架的相关知识,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

平常项目开发中用的较多的是 MyBatis 和 MyBatis-Plus,Jpa 使用较少,本篇就对在 SpringBoot 中使用 JPA 作为数据持久化框架做如下说明:

1、引入依赖

<!-- spring mvc -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- mysql 驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

<!-- lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

<!-- jpa持久层 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

2、数据库连接配置

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/jpa-demo?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=true&characterEncoding=UTF-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
  jpa:
    hibernate:
      # 自动创建表
      ddl-auto: update

ddl-auto 一共有五个可选值

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

3、数据对象(DO)

import lombok.Data;

import javax.persistence.*;

@Table(name = "sys_user")
@Entity
@Data
public class SysUserDO {

    /**
     * 主键-自增
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(columnDefinition = "varchar(12) comment '用户名称'")
    private String name;

    @Column(columnDefinition = "varchar(50) comment '邮箱'")
    private String email;
}
  • @Id,表示该属性为主键字段
  • @GeneratedValue(strategy = GenerationType.IDENTITY),使用主键自增的方式
  • @Column,指定数据库字段的属性,可以设置数据类型,长度、注释等信息,也可以只写一个注解,jpa会自动识别

4、持久化对象

import com.biz.jpa.entity.SysUserDO;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface SysUserRepository extends JpaRepository<SysUserDO, Long> {
}

@Repository,表示这是数据访问层

5、业务层

import com.biz.jpa.dao.SysUserRepository;
import com.biz.jpa.entity.SysUserDO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class SysUserService {

    @Autowired
    private SysUserRepository sysUserRepository;

    public SysUserDO saveUser() {
        SysUserDO sysUser = new SysUserDO();
        sysUser.setName("Asurplus");
        sysUser.setEmail("123456@qq.com");
        sysUserRepository.save(sysUser);
        return sysUser;
    }
}

我们向 sys_user 表中插入一条数据,由于主键自增,我们无需设置主键,插入成功后,自增的主键会自动回写到对象中

6、测试

import com.biz.jpa.entity.SysUserDO;
import com.biz.jpa.service.SysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SysUserController {

    @Autowired
    private SysUserService sysUserService;

    @GetMapping("save")
    public SysUserDO save() {
        return sysUserService.saveUser();
    }
}

访问:

http://localhost:8080/save

返回:

{"id":1,"name":"Asurplus","email":"123456@qq.com"}

插入成功,并返回了自增的主键

Jpa 的集成到这里就完成了,更多 Jpa 的用法需要在实际的项目开发中去探索

到此这篇关于SpringBoot中使用JPA作为数据持久化框架的文章就介绍到这了,更多相关SpringBoot JPA数据持久化框架内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot2.0整合tk.mybatis异常解决

    SpringBoot2.0整合tk.mybatis异常解决

    本文主要介绍了SpringBoot2.0整合tk.mybatis异常,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • springboot3.X 无法解析parameter参数问题分析

    springboot3.X 无法解析parameter参数问题分析

    本文介绍了Spring Boot 3.2.1版本中调用接口时出现的参数解析问题,该错误是由Spring新版本加强的错误校验和报错提示导致的,在Spring 6.1之后,官方要求URL中的传参必须使用`@PathVariable`声明用于接收的变量,而不能省略`@RequestParam`注解,感兴趣的朋友一起看看吧
    2025-03-03
  • IDEA2020.3.2版本自动注释类和方法注释模板配置步骤详解

    IDEA2020.3.2版本自动注释类和方法注释模板配置步骤详解

    这篇文章主要介绍了IDEA2020.3.2版本自动注释类和方法注释模板配置步骤,本文给大家分享了我自己创建过程通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Java实现定时任务的示例代码

    Java实现定时任务的示例代码

    这篇文章主要为大家详细介绍了Java实现定时任务的相关知识,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-11-11
  • 快速定位Java 内存OOM的问题

    快速定位Java 内存OOM的问题

    这篇文章主要介绍了快速定位Java 内存OOM的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 全面详解java代码重构与设计模式

    全面详解java代码重构与设计模式

    这篇文章主要为大家介绍了全面详解java代码重构与设计模式的全面详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Java编程多线程之共享数据代码详解

    Java编程多线程之共享数据代码详解

    这篇文章主要介绍了Java编程多线程之共享数据代码详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Java中多个线程交替循环执行的实现

    Java中多个线程交替循环执行的实现

    有些时候面试官经常会问,两个线程怎么交替执行呀,本文就来详细的介绍一下Java中多个线程交替循环执行的实现,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • Springboot 整合 Java DL4J 打造文本摘要生成系统

    Springboot 整合 Java DL4J 打造文本摘要生成系统

    本文介绍了如何使用SpringBoot整合JavaDeeplearning4j构建文本摘要生成系统,该系统能够自动从长篇文本中提取关键信息,生成简洁的摘要,帮助用户快速了解文本的主要内容,技术实现包括使用LSTM神经网络进行模型构建和训练,并通过SpringBoot集成RESTfulAPI接口
    2024-11-11
  • 解决springboot configuration processor对maven子模块不起作用的问题

    解决springboot configuration processor对maven子模块不起作用的问题

    这篇文章主要介绍了解决springboot configuration processor对maven子模块不起作用的问题,本文通过图文实例代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09

最新评论