几乎所有的 Java 应用都需要用到数据库技术,一般项目中以关系型数据库为主,主流的关系型数据库有MySQL、PostgreSQL、Oracle、SQL Server,其中 MySQL 具有开源免费、易用性、性能和生态的优势,使其成为多数场景下的优选数据库。
首先需要有一个 MySQL 数据库,如果要在电脑上安装,可以参考 MySQL 安装简明教程 进行安装。
Spring Boot 中提供了对主流数据库的自动配置,需要添加 spring-boot-starter-jdbc 和 mysql-connector-j 依赖,其中 spring-boot-starter-jdbc 提供了基础的 JDBC 支持,专注于通过 JdbcTemplate 直接操作 SQL,它包含了 JdbcTemplate、数据源自动配置、事务管理等基础功能。而 mysql-connector-j 是 MySQL 官方提供的 JDBC 驱动程序(Java Database Connectivity Driver),它的核心作用是实现 Java 程序与 MySQL 数据库之间的通信,是 Java 应用连接和操作 MySQL 数据库的必备组件。
在配置 Spring Boot 数据连接前,需要了解一下 DataSource,javax.sql.DataSource 是 Java 官方定义的接口,核心方法是 getConnection(),用于获取数据库连接(Connection 对象)。它的作用是抽象化数据库连接的获取方式,隐藏连接创建的细节(如 URL、用户名、密码等),让开发者无需关心底层实现。接口本身不包含连接池逻辑,它只是规定了 “如何获取连接” 的标准。
数据库连接池(如 HikariCP、Druid、C3P0)是 DataSource 接口的实现类,它在接口规范的基础上,增加了连接复用、连接管理、性能优化等核心功能:
- 连接池会预先创建一定数量的数据库连接,存入 “连接池” 中。
- 当调用 dataSource.getConnection() 时,连接池从池中返回一个空闲连接(而非新建连接)。
- 使用完毕后,connection.close() 不会真正关闭连接,而是将连接归还给池,供下次复用。
连接池通过实现 DataSource 接口,让开发者可以用统一的方式(getConnection())获取连接,同时享受连接池的性能优势。spring-boot-starter-jdbc 依赖了 HikariCP 连接池,因为它性能好、并发高,所以 Spring Boot 推荐和优先选择使用 HikariCP 连接池。
准备工作做好了,开始在 application.properties 中配置数据源,以下是最基本的配置。
spring.datasource.url=jdbc:mysql://localhost:3306/hello_spring?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456创建一个测试类,来测试一下数据库是否连接成功
@SpringBootTest
public class DataSourceTest {
@Resource
private DataSource dataSource;
@Test
public void testDataSource() {
assertNotNull(dataSource, "DataSource should not be null");
try (var connection = dataSource.getConnection()) {
assertNotNull(connection, "Connection should not be null");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Failed to get a connection from the DataSource", e);
}
}
}测试运行通过,说明数据库已经连接成功。

接下来就是执行 SQL 语句了,spring-boot-starter-jdbc 提供了一个由 Spring 管理的 JdbcTemplate 类型的 Bean,这个 Bean 会通过同样自动创建的 DataSource 进行预初始化。因此,可以在需要的位置直接注入这个 Bean。
数据库内创建一个 user 表,并添加一条记录。

// UserDao.java
@Repository()
public class UserDao {
@Resource
private JdbcTemplate jdbcTemplate;
public List<User> getUserList() {
// SQL 查询语句
String sql = "SELECT * FROM user";
return jdbcTemplate.query(sql, (rs, rowNum) -> {
return new User(
rs.getLong("id"),
rs.getString("username"),
rs.getInt("age"));
});
}
}
// 测试文件 UserDaoTest.java
@SpringBootTest
public class UserDaoTest {
@Resource
private UserDao userDao;
@Test
public void testGetUserList() {
var userList = userDao.getUserList();
assertEquals(1, userList.size(), "User list size should be 1");
}
}测试通过

















