Spring Boot 如何集成 SQL Server?

测试智商的网站 1周前 (08-21) 阅读数 9342 #性能测试

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

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

前言

  在现代企业级应用中,SQL Server 是一个广泛使用的关系型数据库管理系统(RDBMS)。Spring Boot 提供了很好的支持,使得集成 SQL Server 变得简单而高效。通过集成 Spring Data JPASpring JDBC,我们能够快速实现数据库操作。

  本文将详细介绍如何在 Spring Boot 中集成 SQL Server,展示如何配置数据库连接、使用 Spring Data JPA 进行数据的增删改查(CRUD),并提供高级配置与优化技巧。


目录

  1. SQL Server 简介
    • 1.1 什么是 SQL Server?
    • 1.2 为什么使用 SQL Server?
  2. Spring Boot 集成 SQL Server
    • 2.1 添加 SQL Server 依赖
    • 2.2 配置数据库连接
    • 2.3 配置 Spring Data JPA
  3. 🧑‍ 数据操作与 CRUD 实现
    • 3.1 创建实体类
    • 3.2 创建 Repository 接口
    • 3.3 实现 Service 层与控制器
  4. 高级配置与优化
    • 4.1 数据库连接池配置
    • 4.2 数据源配置与性能优化
    • 4.3 使用 @Transactional 进行事务管理
  5. 总结:构建高效的数据存储层

1. SQL Server 简介

1.1 什么是 SQL Server?

SQL Server 是由 Microsoft 开发的关系型数据库管理系统(RDBMS),广泛应用于企业级应用和大规模数据存储。它支持标准的 SQL 查询语言,并提供多种特性,如事务管理、数据完整性、查询优化、数据备份和恢复等。

1.2 为什么使用 SQL Server?

  • 高性能:SQL Server 在处理复杂查询和大数据量时具有良好的性能表现,能够支持高并发的应用。
  • 安全性:SQL Server 提供了强大的安全性功能,如加密、身份验证和授权管理。
  • 数据恢复:支持数据库的备份与恢复,可以确保数据安全。
  • 广泛的企业支持:作为 Microsoft 的产品,SQL Server 在企业环境中得到了广泛应用,具有丰富的技术支持和文档。

2. Spring Boot 集成 SQL Server

2.1 添加 SQL Server 依赖

首先,需要在 pom.xml 文件中添加 SQL Server 和 Spring Data JPA 的相关依赖:

<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot Starter Data JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- SQL Server JDBC Driver -->
    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
    </dependency>
</dependencies>

2.2 配置数据库连接

application.propertiesapplication.yml 中配置 SQL Server 的连接信息:

# SQL Server Database Configuration
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=mydb;encrypt=false;trustServerCertificate=true
spring.datasource.username=sa
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

# JPA Configuration
spring.jpa.database-platform=org.hibernate.dialect.SQLServerDialect
spring.jpa.hibernate.ddl-auto=update  # 自动更新数据库结构
spring.jpa.show-sql=true  # 显示 SQL 语句
spring.jpa.properties.hibernate.format_sql=true  # 格式化 SQL

application.properties 中,spring.datasource.url 用于指定 SQL Server 数据库的连接 URL,spring.datasource.usernamespring.datasource.password 用于连接的认证信息。

2.3 配置 Spring Data JPA

Spring Boot 会自动配置 DataSourceEntityManagerFactory,因此你只需要确保数据库连接正确,Spring Data JPA 就会自动处理与数据库的交互。


🧑‍ 3. 数据操作与 CRUD 实现

3.1 创建实体类

在 SQL Server 中创建一个 User 表,并将其映射为 JPA 实体类。

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;
    private String password;

    // Getters and Setters
}

在上面的代码中,User 类被映射为数据库中的一张表。@Entity 注解指定该类为实体类,@Id@GeneratedValue 注解用于标识主键和自动生成主键。

3.2 创建 Repository 接口

接下来,创建一个继承 JpaRepository 的接口,提供基本的数据库操作。

import org.springframework.data.jpa.repository.JpaRepository;

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

UserRepository 接口继承了 JpaRepository,通过 findByUsername 方法可以查询指定用户名的用户。

3.3 实现 Service 层与控制器

接下来,我们创建一个 UserService 类来处理业务逻辑,并创建一个控制器 UserController 来处理 HTTP 请求。

创建 UserService

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 getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    public User updateUser(Long id, User user) {
        if (userRepository.existsById(id)) {
            user.setId(id);
            return userRepository.save(user);
        }
        return null;
    }

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

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
}

创建 UserController

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

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

    @Autowired
    private UserService userService;

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.createUser(user);
    }

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        return userService.updateUser(id, user);
    }

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

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }
}

UserController 中,我们创建了 CRUD 接口:POST /users 创建用户,GET /users/{id} 获取用户,PUT /users/{id} 更新用户,DELETE /users/{id} 删除用户,以及 GET /users 获取所有用户。

3.4 运行应用并测试

启动 Spring Boot 应用后,使用 Postman 或 Curl 进行 API 测试。例如:

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

️ 4. 高级配置与优化

4.1 数据库连接池配置

为了提升数据库的性能,特别是在高并发的情况下,我们可以配置数据库连接池。Spring Boot 默认使用 HikariCP 作为连接池,提供高效的连接管理。

spring.datasource.hikari.maximum-pool-size=10  # 设置最大连接池大小
spring.datasource.hikari.connection-timeout=30000  # 设置连接超时时间
spring.datasource.hikari.idle-timeout=600000  # 设置连接空闲时间

4.2 数据源配置与性能优化

在实际生产环境中,数据库的性能优化非常重要。除了连接池配置外,你还可以:

  • 启用查询缓存,避免重复查询。
  • 使用数据库索引,加速查询。
  • 优化 SQL 查询,减少不必要的查询。

4.3 使用 @Transactional 进行事务管理

在处理涉及多次数据库操作的业务逻辑时,使用事务确保数据一致性。例如,在 UserService 中,我们可以使用 @Transactional 注解来确保数据操作的原子性:

@Transactional
public void someBusinessMethod() {
    // 多个数据库操作
}

总结:构建高效的数据存储层

通过本教程,我们成功将 SQL Server 数据库集成到了 Spring Boot 项目中,并通过 Spring Data JPA 实现了用户的增删改查(CRUD)功能。我们还探索了如何配置数据库连接、优化数据库性能以及使用事务管理。

  • Spring Data JPA 提供了简洁的数据库操作接口,减少了手写 SQL 的复杂度。
  • SQL Server 提供了高效的关系型数据库存储,适合处理结构化数据。
  • Spring Boot 的自动配置特性让 SQL Server 的集成变得非常简单和直观。

通过掌握这些内容,你可以轻松构建高效、可靠的数据库存储层,并为 Spring Boot 应用提供强大的数据支持!

🧧福利赠与你🧧

  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学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-

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