Spring Boot(12):轻松搞定关系型数据库,Spring Boot与JPA的完美结合!

2023-09-13 08:28:51 浏览数 (2)

代码语言:javascript复制
环境说明:Windows10   Idea2021.3.2   Jdk1.8   SpringBoot 2.3.1.RELEASE

1. 前言

Spring Boot是Spring家族中的一员,也是一个非常重要的组件。Spring Boot的主要目标是简化Spring应用的构建、开发、测试以及部署等过程。Spring Boot提供了一个快速且强大的方式来创建基于Spring的应用程序,并帮助开发者快速构建,减少了很多繁琐的配置工作,使得我们可以专注于业务逻辑的实现。

本篇文章将介绍如何在Spring Boot中整合JPA,实现对数据库的访问和操作。

2. 摘要

本文将通过一个简单的示例来介绍如何在Spring Boot中整合JPA。首先,我们会创建一个简单的实体类,并使用JPA注解来映射到数据库表上。然后,我们会编写一个Repository类,用于对数据库进行增删改查操作。最后,我们会编写一些简单的测试用例来验证我们所编写的代码的正确性。

3. 正文

3.1 Spring Boot 框架和 JPA 持久化框架介绍

Spring Boot 框架是一种基于 Spring 框架的快速开发框架。它采用约定大于配置的方式,自动配置 Spring 应用程序,并且提供了许多常用的功能,如 Web 应用程序、安全性、数据访问等等。

JPA(Java Persistence API) 是一种Java持久化规范,是一组Java API,用于管理Java对象与关系型数据库之间的映射。JPA 提供了一种方便的方式来将 Java 对象映射到关系型数据库中。

3.2 Spring Boot框架和JPA持久化框架的配置

添加依赖
代码语言:javascript复制
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

示例截图如下:

3.2.1 配置JPA相关的参数

在application.properties文件中,我们需要配置一些JPA相关的参数:

代码语言:javascript复制
# 数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# JPA相关配置
# 是否打印SQL语句
spring.jpa.show-sql=true
# 是否在控制台显示SQL
spring.jpa.properties.hibernate.format_sql=true
# 自动创建/更新表结构
spring.jpa.hibernate.ddl-auto=update
# 数据库方言,可以自动根据数据库类型选择
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
3.2.2 创建一个简单的实体类

我们先来创建一个简单的实体类,并使用JPA注解来映射到数据库表上。这里我们创建一个名为User的实体类,代表用户信息,包含id、name、age三个属性。

代码语言:javascript复制
@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Integer age;

    // 省略getter和setter方法
}
3.2.3 编写Repository类

在Spring Boot中,可以通过继承JpaRepository或者CrudRepository来快速编写一个Repository类。在本文中,我们以继承JpaRepository为例来演示。

代码语言:javascript复制
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

这里需要注意的是,在Repository接口中不需要编写任何的实现代码,Spring Data JPA会帮我们自动生成相应的实现代码。

3.2.4 编写测试用例

在测试用例中,我们可以通过@Autowired注解注入之前定义的UserRepository,并对其进行增删改查操作。

代码语言:javascript复制
@SpringBootTest
class UserRepositoryTest {
    @Autowired
    private UserRepository userRepository;

    /**
     * 测试保存用户
     */
    @Test
    void testSaveUser() {
        User user = new User();
        user.setName("张三");
        user.setAge(18);
        userRepository.save(user);
    }

    /**
     * 测试根据id查询用户
     */
    @Test
    void testFindUserById() {
        User user = userRepository.findById(1L).orElse(null);
        System.out.println(user);
    }

    /**
     * 测试查询所有用户
     */
    @Test
    void testFindAllUser() {
        List<User> userList = userRepository.findAll();
        System.out.println(userList);
    }

    /**
     * 测试删除用户
     */
    @Test
    void testDeleteUser() {
        userRepository.deleteById(1L);
    }

    /**
     * 测试更新用户
     */
    @Test
    void testUpdateUser() {
        User user = userRepository.findById(2L).orElse(null);
        user.setName("李四");
        user.setAge(20);
        userRepository.save(user);
    }
}
3.2.5 运行测试用例

在运行测试用例之前,需要先创建一个名为test的数据库,并确保在application.properties文件中配置的数据库连接参数正确。然后,我们可以直接运行测试用例,结果如下:

Hibernate: create table user (id bigint not null auto_increment, age integer, name varchar(255), primary key (id)) Hibernate: alter table user modify column id bigint not null auto_increment Hibernate: insert into user (age, name) values (?, ?) Hibernate: select user0_.id as id1__00_, user0_.age as age2__00_, user0_.name as name3__00_ from user user0_ where user0_.id=? User{id=1, name='张三', age=18} Hibernate: select user0_.id as id1__0, user0_.age as age2__0, user0_.name as name3__0 from user user0_ [User{id=1, name='张三', age=18}] Hibernate: delete from user where id=? Hibernate: select user0_.id as id1__00_, user0_.age as age2__00_, user0_.name as name3__00_ from user user0_ where user0_.id=? Hibernate: update user set age=?, name=? where id=?

从结果中可以看出,我们成功地对数据库进行了增删改查操作。

4. 小结

本文介绍了如何在Spring Boot中整合JPA,通过一个简单的示例演示了如何使用JPA注解定义实体类,并编写Repository类来对数据库进行操作。同时,我们也编写了一些简单的测试用例,验证了我们所编写的代码的正确性。通过对本文的学习,相信读者已经掌握了在Spring Boot中使用JPA的基本方法,可以在实际项目中灵活运用。

0 人点赞