Spring Data JPA实现持久化存储数据到数据库的示例代码

Sure,我来介绍一下Spring Data JPA实现持久化存储数据到数据库的攻略。

Spring Data JPA实现持久化存储数据到数据库的攻略

简介

Spring Data JPA(Java Persistence API)是Spring Data的一部分,它简化了对JPA的使用和集成。它提供了通用的JPA Repository接口,可以轻松地在Spring应用中实现对JPA的访问和管理。本教程将向您展示如何使用Spring Data JPA将数据持久存储到数据库中。

环境准备

在开始之前,需要说明的是您需要准备好以下环境:

  • Java 8或更高版本
  • Maven 3.3或更高版本
  • Spring Boot 2.0或更高版本
  • MySQL数据库

添加依赖

在POM文件中,需要添加以下依赖:

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

创建实体类

首先,您需要创建一个实体类,它将映射到数据库表。例如,假设您要创建一个名为“User”的实体类,可以定义如下:

import javax.persistence.*;

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String email;

    // Getters and Setters
}

在此实体类中,@Entity 注解用于指示它是一个实体类,@Table 注解用于指定实体类对应的数据库表名。@Id 表示该字段是实体类的主键,@GeneratedValue 用于生成自增的主键值,@GeneratedValue(strategy = GenerationType.IDENTITY) 指定使用数据库的自增机制生成主键。

创建Repository

接下来,需要创建一个repository,用于管理实体类对应的数据库记录。Spring Data JPA 提供了一些通用的仓库类,可以直接继承使用,也可以使用@Repository注解声明一个仓库类。例如,对于上面的User实体类,可以创建一个 UserRepository 并继承 JpaRepository,如下面的示例所示:

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

这个示例中,使用 @Repository 将 UserRepository 标记为一个 Spring Bean。JpaRepository 是 Spring Data JPA 提供的通用仓库接口,User 指定要管理的实体类,Long 是实体类的主键的类型。

在配置文件中配置数据源

接下来,需要在配置文件中指定用于连接数据库的数据源。在 application.properties 文件(或 application.yml 文件)中添加以下内容:

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=yourusername
spring.datasource.password=yourpassword
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto = update

上述配置通过Spring Boot的auto-configuration自动装配,为您设置了数据源的连接和驱动,并且指定了要连接的数据库的名称。这里的spring.jpa.hibernate.ddl-auto是JPA自动根据实体类来建表的模式选择。update表示自动检测表结构变化并更新数据表结构。如果首次连接创建表结构,需要替换为create或create-drop。

编写示例代码

现在就可以使用 UserRepository 来实现对 User 的 CRUD 操作了。例如,为了插入一条用户记录,可以在应用程序的入口类中编写以下代码:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application implements CommandLineRunner {
    @Autowired
    private UserRepository userRepository;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        User user = new User();
        user.setName("test");
        user.setEmail("test@example.com");
        userRepository.save(user);
    }
}

在这个例子中,使用 @Autowired 注解注入了 UserRepository,CommandLineRunner 定义了一个 run 方法,当应用程序启动时,Spring Boot 将自动执行该方法,并将 UserRepository 注入到其中。

User user = new User();
user.setName("test");
user.setEmail("test@example.com");
userRepository.save(user);

此代码将创建一个名称为“test”,电子邮件地址为“test@example.com”的新用户,并将其保存到MySQL数据库中。

除此之外,还可以使用其他方法,如 findAll()、findById()、deleteById()、delete() 等,它们都是由 JpaRepository 接口提供的。

示例说明

接下来提供两个示例,一个是使用 Spring Data JPA 在 MySQL 数据库中创建数据表;另一个是在一个 Spring Boot 应用程序中使用Spring Data JPA 完成将用户实体存储到 MySQL 数据库和查询的例子。

示例1:创建数据表

首先,看一个简单的示例,用 Spring Data JPA 在 MySQL 数据库中创建数据表,以下是相关的代码。

首先,创建一个 MySQL 数据库,名为“test”(utf-8),并添加一些配置:

spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root

spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

spring.jpa.properties.hibernate.hbm2ddl.import_files=/import.sql

接下来,定义一个 User 类作为实体类:

@Entity
@Table(name = "t_user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;
    // getter & setter
}

然后,编写一个 UserController 类,来对 User 实体进行操作:

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserRepository userRepository;

    // 添加用户
    @PostMapping("/")
    public User add(User user){
        return userRepository.save(user);
    }

    // 查询所有用户
    @GetMapping("/")
    public List<User> users(){
        return userRepository.findAll();
    }

    // 根据 id 查询用户
    @GetMapping("/{id}")
    public User user(@PathVariable Long id){
        return userRepository.findById(id).get();
    }

    // 根据 id 删除用户
    @DeleteMapping("/{id}")
    public void delete(@PathVariable Long id){
        userRepository.deleteById(id);
    }

    // 修改用户
    @PutMapping("/")
    public User modify(User user){
        return userRepository.save(user);
    }

}

最后,启动应用程序,通过 Postman 等工具来访问上述控制器中的路由。

示例2:在 Spring Boot 应用程序中使用 Spring Data JPA 存储和查询 User 实体

现在,我们来看一个在一个 Spring Boot 应用程序中使用Spring Data JPA 完成将用户实体存储到 MySQL 数据库和查询的例子。

以下是相关的代码。

  1. 创建 MySQL 数据库,名为“test”(utf-8),并添加一些配置:
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root

spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

spring.jpa.properties.hibernate.hbm2ddl.import_files=/import.sql
  1. 创建 User 实体类:
@Entity
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;
    // getter & setter
}
  1. 创建 User Repository 接口:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
  1. 编写 AppController 启动类:
@RestController
public class AppController {
    @Autowired
    private UserRepository userRepository;

    // 添加一个用户
    @GetMapping("/addUser")
    public String addUser(){
        User user = new User();
        user.setName("张三");
        user.setEmail("zhangsan@example.com");
        userRepository.save(user);
        return "Add Success";
    }

    // 查询所有用户
    @GetMapping("/findUser")
    public List<User> findUser(){
        return userRepository.findAll();
    }
}

最后,运行该程序,使用浏览器或Postman测试一下地址:

  • http://localhost:8080/addUser
  • http://localhost:8080/findUser

总结

以上就是使用 Spring Data JPA 实现持久化存储数据到数据库的攻略。通过 Spring Data JPA ,您可以轻松地完成 CRUD 操作。当然,本文只是给出了很基础的操作,如果你想了解更多关于 Spring Data JPA 的高级操作,可以参阅其他相关文献。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Data JPA实现持久化存储数据到数据库的示例代码 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • Spring零基础入门WebFlux响应式编程

    Spring零基础入门WebFlux响应式编程攻略 什么是WebFlux? WebFlux是Spring框架5.0版本引入的新特性,它是基于响应式编程模型的Web框架,具有高可扩展性、高并发性等优势。 必备技能要求 在学习WebFlux前,需要掌握以下技能: Spring基础知识,如IoC/DI、AOP等概念 Java 8的Lambda表达式和Stream …

    Java 2023年5月19日
    00
  • 浅谈mac下maven的安装配置与使用

    浅谈Mac下Maven的安装配置与使用 简介 Maven 是一款 Java 项目自动化构建工具,可用于管理项目依赖、构建、测试、打包、发布等。本文将介绍在 Mac 下 Maven 的安装、配置和使用方法。 安装 下载 Maven 安装包 Maven 官方网站提供了 Windows 和 Linux 的安装包,可以从 https://maven.apache.o…

    Java 2023年5月19日
    00
  • Spring Boot如何实现定时任务的动态增删启停详解

    下面我会详细讲解“Spring Boot如何实现定时任务的动态增删启停详解”的完整攻略。 什么是定时任务? 定时任务(Scheduled Task)是指在指定的时间点或时间间隔内自动执行某个操作的任务。在很多场景下,我们经常需要定时执行某些操作,例如定时清理临时数据、定时发送邮件等。 Spring Boot如何实现定时任务 Spring Boot 提供了标准…

    Java 2023年5月19日
    00
  • java实现文件编码转换的方法

    首先我们需要明确一下,文件编码转换的方法主要包括文件读取、编码转换以及文件写入三个过程,接下来我将一步一步地讲解如何在Java中实现文件编码转换。 第一步:确定源文件编码 在进行文件编码转换之前,我们需要先了解清楚源文件的编码格式,因为不同的编码格式需要采用不同的解码方式。具体的获取编码格式的方法可以使用Java自带的CharsetDetector类来实现,…

    Java 2023年5月20日
    00
  • 聊聊Controller中RequestMapping的作用

    聊聊Controller中RequestMapping的作用 1. 什么是RequestMapping RequestMapping是Spring MVC中的一个注解,用于将HTTP请求映射到Controller的处理方法上。通过RequestMapping注解,我们可以指定请求的URL、请求方法、请求参数等信息,从而实现请求的路由和处理。 2. Reque…

    Java 2023年5月18日
    00
  • Spring Security使用数据库认证及用户密码加密和解密功能

    下面是使用Spring Security实现数据库认证和密码加密/解密的完整攻略: 一、创建数据库 首先,我们需要创建一个数据库,用于存储用户信息。假设我们的数据库名为security_demo,包含一张名为user的用户表,其中包含id、username、password、enabled四个字段。我们可以使用如下的SQL语句创建该表: CREATE TAB…

    Java 2023年5月20日
    00
  • Spring Security基于json登录实现过程详解

    以下是“Spring Security基于json登录实现过程详解”的完整攻略: 什么是Spring Security? Spring Security是一个基于Spring框架的安全控制框架。它提供了一种在Web请求级别和方法级别上控制访问的方式,并为身份验证、授权和攻击保护提供了大量的支持和扩展。 Spring Security基于json登录实现的过程…

    Java 2023年5月20日
    00
  • 关于Java反射机制 你需要知道的事情

    关于Java反射机制你需要知道的事情 什么是Java反射机制 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;并且能够调用这个类的任意方法或属性。这种动态获取类信息以及动态调用对象方法的功能称为Java反射机制。 Java反射机制的背景 在开发过程中,Java程序需要经常对各种类文件进行操作。例如,获取一个类的构造函数、获取…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部