问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Spring Boot集成Spring Data JPA实现数据保存

创作时间:
作者:
@小白创作中心

Spring Boot集成Spring Data JPA实现数据保存

引用
CSDN
1.
https://m.blog.csdn.net/weixin_72052233/article/details/139274457

Spring Boot集成Spring Data JPA是实现数据持久化的一种常见方式。本文将详细介绍如何在Spring Boot项目中使用JPA进行数据保存,包括项目搭建、代码实现和测试验证等步骤。

JPA简介

在应用程序运行过程中,通常需要将业务数据保存起来,最常见的保存方式是将数据存储到数据库中。为了简化数据库操作,Spring提供了Spring Data JPA框架,它支持多种数据访问技术,如JDBC、MyBatis、Hibernate和JPA等。

JPA规范定义了一系列标准接口,用于在实体类和数据库表之间建立映射关系。通过使用JPA,开发者可以在代码中进行数据库操作时,无需编写SQL语句,就能实现对数据库表的访问和操作。

项目搭建步骤

1. 新建Spring Boot项目

2. 配置pom.xml

在项目的pom.xml文件中添加以下依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.study</groupId>
    <artifactId>springboot_jpa</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot_jpa</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.3.0</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

3. 配置application.properties

在application.properties文件中添加数据库连接信息和JPA相关配置:

spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true
spring.datasource.username=root
spring.datasource.password=admin
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true

4. 创建实体类

创建与数据库表对应的实体类,并使用JPA注解标记实体类和字段:

package com.study.springboot_jpa.model;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
@Data
public class User {
    @Id
    @GeneratedValue
    private long id;
    @Column(nullable = false, unique = true)
    private String userName;
    @Column(nullable = false)
    private String password;
    @Column(nullable = false)
    private int age;
}

5. 创建Repository接口

创建一个继承自JpaRepository的接口,用于对实体类进行数据库操作:

package com.study.springboot_jpa.model;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    User findByUserName(String userName);
}

6. 编写测试用例

在测试类中注入UserRepository,并使用其提供的方法进行数据库操作:

package com.study.springboot_jpa;
import com.study.springboot_jpa.model.User;
import com.study.springboot_jpa.model.UserRepository;
import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.Optional;

@Slf4j
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
class SpringbootJpaApplicationTests {
    @Autowired
    private UserRepository userRepository;

    @Test
    public void userTest() {
        User user = new User();
        user.setUserName("myCc");
        user.setAge(18);
        user.setPassword("123");

        userRepository.save(user);
        User item = userRepository.findByUserName("myCc");
        System.out.println(item);
        Assert.assertNotNull(item);
        Assert.assertEquals(true, userRepository.existsById(1L));
        Optional<User> byId = userRepository.findById(1L);
        Assert.assertEquals(true, byId.isPresent());
        Assert.assertEquals(false, userRepository.findById(2L).isPresent());
        userRepository.deleteById(1L);
        Assert.assertEquals(false, userRepository.existsById(1L));
    }
}

测试注意事项

  1. 如果遇到包不存在的错误,可以尝试在Terminal运行mvn idea:idea命令。
  2. 每次运行测试前,需要先删除数据库并重建,以确保表user为空。可以使用以下SQL语句:
mysql> drop database test;
Query OK, 2 rows affected (0.04 sec)

mysql> create database test;
Query OK, 1 row affected (0.01 sec)

mysql> use test;
Database changed

mysql> select * from user;
Empty set (0.00 sec)

启动项目后,控制台会打印出执行的SQL语句,便于调试和验证。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号