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

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

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持久化框架的配置

添加依赖

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

示例截图如下:
image.png

3.2.1 配置JPA相关的参数

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

# 数据库连接
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三个属性。

@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为例来演示。

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

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

3.2.4 编写测试用例

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

@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_0_0_, user0_.age as age2_0_0_, user0_.name as name3_0_0_ 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_0_0_, user0_.age as age2_0_0_, user0_.name as name3_0_0_ from user user0_ where user0_.id=?
Hibernate: update user set age=?, name=? where id=?

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

4. 小结

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

关于我

我是bug菌,CSDN | 阿里云 | 华为云 | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金 | InfoQ | 51CTO等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。