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日

相关文章

  • Java泛型机制的程序演示详解

    Java泛型机制的程序演示详解 什么是Java泛型? Java泛型是JDK1.5版本中引入的新特性。它的主要目的是用来规范和简化Java中的类型变量的使用。 在Java泛型出现之前,Java中的类或者方法的参数或者返回值只能使用具体的类型,比如String、Integer等。而Java泛型则提供了一种灵活的方式,可以在定义类或者方法时,以一个类型变量作为参数…

    Java 2023年5月30日
    00
  • JavaScript 引用类型实例详解【数组、对象、严格模式等】

    JavaScript 引用类型实例详解 在 JavaScript 中,引用类型是一种数据结构类型,它们不同于基本类型,基本类型是按值传递,而引用类型则是按引用传递,即在内存中存放的是该值在堆内存中存放的地址,而不是该值本身。常见的引用类型包括数组、对象、函数等。 数组 数组是一种可以存储一组有序数据的集合,它是一种可以动态扩展的对象。数组的声明方式如下: l…

    Java 2023年5月26日
    00
  • MyBatis实现动态查询、模糊查询功能

    下面是MyBatis实现动态查询、模糊查询功能的完整攻略。 动态查询 动态查询就是查询条件随着用户的选择而动态生成的查询语句。MyBatis提供了三种方式来实现动态查询: If If标签用于判断某个条件成立时才会执行包含在其中的查询语句,示例代码如下: <select id="dynamicIfTest" parameterType…

    Java 2023年5月19日
    00
  • SpringBoot实战之处理异常案例详解

    让我来详细讲解一下 “SpringBoot实战之处理异常案例详解” 的完整攻略。 一、了解SpringBoot异常处理 在SpringBoot中处理异常主要是通过@ControllerAdvice注解 和@ExceptionHandler注解实现的。 @ControllerAdvice注解在类上,主要用来处理全局的异常。而@ExceptionHandler注…

    Java 2023年5月27日
    00
  • Spring Boot 静态资源处理方式

    下面是Spring Boot静态资源处理方式的完整攻略: 一、什么是Spring Boot静态资源处理方式 Spring Boot是一个快速开发框架,它提供了非常方便的静态资源处理方式,可以让我们轻松地管理Web应用程序的静态资源,包括CSS、JavaScript、图片等。静态资源可以是Web应用程序的可执行程序之外的文件。静态资源可以存储在文件系统中,也可…

    Java 2023年6月15日
    00
  • 详解Java多线程编程中互斥锁ReentrantLock类的用法

    详解Java多线程编程中互斥锁ReentrantLock类的用法 简介 Java多线程编程中,为了保证线程安全,需要保证同一时间只有一个线程访问共享资源。使用互斥锁可以实现这个目的。在Java中,ReentrantLock类提供了互斥锁的功能。 ReentrantLock是可重入的互斥锁,它允许线程重复地获取同一把锁,而不会造成死锁。与synchronize…

    Java 2023年5月19日
    00
  • Java数据结构之位图的简单实现和使用

    Java数据结构之位图的简单实现和使用 随着数据量的快速增长,数据结构的高效率已经变得越来越重要。而位图是一个简单而高效率的用于数据存储与查询的数据结构。本文将详细介绍位图的概念、实现过程以及使用方法。 什么是位图? 位图(Bit Map) 是一种非常简单的存储数据结构,它使用一个或多个二进制位来表示一个数据的状态。位图的本质是一个大整数,其中的每个二进制位…

    Java 2023年5月26日
    00
  • SSH框架网上商城项目第2战之基本增删查改、Service和Action的抽取

    本文将详细讲解SSH框架网上商城项目第2战之基本增删查改、Service和Action的抽取的完整攻略,包括概述、步骤、示例等内容。 概述 SSH框架是指以Struts2作为Web层,Spring作为业务层和数据访问层的容器,Hibernate作为数据持久化层的开发框架。本次攻略的目的是介绍如何在SSH框架下实现基本增删查改操作,以及Service和Acti…

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