Spring框架作为Java开发中最流行的轻量级框架之一,提供了多种连接数据库的方式,其中最常用的是通过Spring Data JPA和JdbcTemplate实现,本文将详细介绍Spring如何连接数据库,包括环境配置、核心组件及实际应用步骤。

环境准备与依赖配置
在Spring项目中连接数据库,首先需要在pom.xml中添加必要的依赖,以MySQL数据库为例,需引入JDBC驱动、Spring Data JPA(或JdbcTemplate)以及数据库连接池(如HikariCP),以下是关键依赖示例:
<dependencies>
<!-- Spring Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- 连接池(Spring Boot默认使用HikariCP) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
</dependencies>
数据库连接配置
在application.properties或application.yml中配置数据库连接信息,以application.properties为例:
# 数据库URL spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC # 用户名和密码 spring.datasource.username=root spring.datasource.password=123456 # 连接池配置 spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5 # JPA配置(可选) spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true
使用Spring Data JPA连接数据库
Spring Data JPA通过简化JPA(Java Persistence API)操作,实现数据库交互的便捷化,以下是核心步骤:
-
创建实体类
使用@Entity注解标记数据库表映射的实体类,@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // 省略getter和setter } -
定义Repository接口
继承JpaRepository接口,无需编写实现类即可获得CRUD方法:
public interface UserRepository extends JpaRepository<User, Long> { List<User> findByName(String name); } -
注入并使用Repository
在Service层注入Repository并调用方法:@Service public class UserService { @Autowired private UserRepository userRepository; public void saveUser(User user) { userRepository.save(user); } }
使用JdbcTemplate连接数据库
JdbcTemplate是Spring提供的轻量级JDBC操作工具,适合简单的SQL操作,使用步骤如下:
-
配置JdbcTemplate
Spring Boot会自动配置JdbcTemplate,直接注入即可:@Service public class UserService { @Autowired private JdbcTemplate jdbcTemplate; public void insertUser(String name, String email) { String sql = "INSERT INTO user (name, email) VALUES (?, ?)"; jdbcTemplate.update(sql, name, email); } }
事务管理
Spring通过@Transactional注解声明式管理事务,确保数据一致性。
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Transactional
public void updateUser(Long id, String newName) {
User user = userRepository.findById(id).orElseThrow();
user.setName(newName);
userRepository.save(user);
}
}
相关问答FAQs
Q1: Spring Boot中如何切换不同的数据库连接池?
A: 默认使用HikariCP,若需切换为Druid,需移除HikariCP依赖,添加Druid依赖并配置spring.datasource.type=com.alibaba.druid.pool.DruidDataSource,同时可在配置文件中设置Druid专属参数(如连接监控)。

Q2: Spring Data JPA如何实现多表关联查询?
A: 通过在实体类中使用@OneToMany、@ManyToOne等注解建立关联关系,
@Entity
public class Order {
@Id
@GeneratedValue
private Long id;
@ManyToOne
private User user;
// 其他字段
}
Repository中可直接通过关联对象查询,如orderRepository.findByUser(user)。