Spring Boot如何与数据库整合?此篇告诉你!

本文收录于「滚雪球学SpringBoot」专栏(全网一个名),手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

第一步:配置数据库连接(H2、MySQL、PostgreSQL等)

1.1 选择数据库

在Spring Boot中,配置数据库连接非常简单。Spring Boot支持多种数据库,包括内存数据库(如H2),关系型数据库(如MySQL、PostgreSQL等)。你可以根据需求选择适合的数据库。

1.1.1 配置H2数据库

H2是一种轻量级的内存数据库,非常适合开发和测试环境。你可以在application.properties中配置H2数据库连接:

# src/main/resources/application.properties
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true

spring.h2.console.enabled=true开启了H2的Web控制台,可以通过浏览器访问数据库。

1.1.2 配置MySQL数据库

对于生产环境,MySQL是一个常用的数据库选项。配置MySQL需要在application.properties文件中指定数据库连接信息:

# src/main/resources/application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=rootpassword
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

1.1.3 配置PostgreSQL数据库

PostgreSQL是另一种常见的关系型数据库,配置方式类似于MySQL,只需要调整数据库连接URL和驱动类即可:

# src/main/resources/application.properties
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=postgres
spring.datasource.password=postgrespassword
spring.datasource.driverClassName=org.postgresql.Driver
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

第二步:Spring Boot的JPA配置与使用

Spring Boot默认集成了Spring Data JPA,可以简化与数据库的交互。我们将通过@Entity@Repository@Service注解来定义数据库实体类、仓库层和服务层。

2.1 配置JPA

Spring Boot会自动根据spring.jpa.hibernate.ddl-auto的配置来决定数据库模式的创建和更新。ddl-auto的值可以是:

  • none:不做任何数据库更改
  • update:更新数据库模式
  • create:创建新的数据库表
  • create-drop:创建表并在应用停止时删除

一般来说,在开发阶段,使用update比较常见。生产环境中,可能需要手动管理数据库模式。

2.2 创建实体类(Entity)

Spring Data JPA通过@Entity注解标识一个类为实体类,表示这个类会映射到数据库中的一张表。每个实体类至少需要一个主键,可以通过@Id注解来指定。

package com.example.demo.model;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User {

    @Id
    private Long id;
    private String name;
    private String email;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

在上面的代码中,User类被注解为@Entity,表示它是一个数据库实体类。@Id注解指定了id属性为主键。

2.3 创建仓库层(Repository)

Spring Data JPA提供了一个JpaRepository接口,可以帮助我们简化数据库操作。你只需要创建一个继承JpaRepository的接口,它会自动提供常用的CRUD操作。

package com.example.demo.repository;

import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    // 可以自定义查询方法
    User findByName(String name);
}

UserRepository接口继承了JpaRepository,Spring Data JPA会自动为我们提供增、删、改、查等操作。你还可以通过方法名来定义自定义查询(如上面的findByName)。

2.4 创建服务层(Service)

为了封装业务逻辑,我们通常会创建一个服务层,来调用仓库层提供的数据访问方法。

package com.example.demo.service;

import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    // 增
    public User createUser(User user) {
        return userRepository.save(user);
    }

    // 查
    public User getUser(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    // 删
    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }

    // 改
    public User updateUser(Long id, String name, String email) {
        User user = userRepository.findById(id).orElse(null);
        if (user != null) {
            user.setName(name);
            user.setEmail(email);
            return userRepository.save(user);
        }
        return null;
    }
}

在服务层,我们通过@Autowired注入UserRepository,并实现了增、删、改、查等常见的业务方法。


第三步:数据库操作(增删改查)

接下来,我们来看一些常见的数据库操作:增、删、改、查。

3.1 增:创建用户

通过UserService类中的createUser方法,我们可以将一个User对象保存到数据库中。

package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    // 创建用户
    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.createUser(user);
    }
}

在上面的UserController中,我们通过@PostMapping注解定义了一个/users的POST请求接口。客户端可以通过请求体发送User对象,调用createUser方法将其保存到数据库中。

3.2 查:获取用户信息

通过UserService中的getUser方法,我们可以根据用户ID查询用户信息。

// 获取用户
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
    return userService.getUser(id);
}

这里,@GetMapping("/{id}")注解会根据URL中的ID参数调用getUser方法,查询数据库中的用户信息并返回。

3.3 改:更新用户信息

我们可以通过updateUser方法来更新已有用户的信息。

// 更新用户
@PutMapping("/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
    return userService.updateUser(id, user.getName(), user.getEmail());
}

@PutMapping("/{id}")将HTTP PUT请求映射到updateUser方法,更新指定ID的用户信息。

3.4 删:删除用户

通过deleteUser方法删除用户。

// 删除用户
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
    userService.deleteUser(id);
}

@DeleteMapping("/{id}")注解会根据用户ID删除指定用户。


第四步:启动与测试

完成以上配置后,运行Spring Boot应用,你就可以通过Postman或浏览器访问以下接口来进行数据库操作:

  • POST /users:创建用户
  • GET /users/{id}:获取用户信息
  • PUT /users/{id}:更新用户信息
  • DELETE /users/{id}:删除用户

总结

在本文中,我们深入探讨了如何在Spring Boot应用中整合数据库,并使用Spring Data JPA简化数据库操作。通过@Entity@Repository@Service注解,我们有效地组织了数据库交互的不同层级。无论是增、删、改、查操作,Spring Boot都提供了强大的支持,帮助我们高效地开发和维护应用。

你可以根据自己的需求,选择不同的数据库(如H2、MySQL、PostgreSQL等),并将它们与Spring Boot无缝整合。希望这篇文章能够帮助你快速上手数据库整合,为你的Web应用开发打下坚实的基础!

🧧福利赠与你🧧

  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学SpringBoot」专栏(全网一个名),bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大, 无边无际,指数级提升。

  最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

️ Who am I?

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主/价值贡献奖,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-

  • 随机文章
  • 热门文章
  • 热评文章
热门