Skip to content

使用 JdbcTemplate 访问关系型数据库

在 Spring Boot 中,JdbcTemplate 是一个非常强大的工具,用于执行基本的 JDBC 操作。它提供了比原生 JDBC 更高级的错误处理和资源管理机制,使得开发人员可以更专注于业务逻辑而不是底层的数据库操作细节。

下面是如何在 Spring Boot 应用中使用 JdbcTemplate 的步骤:

1. 引入依赖

首先,你需要在你的 pom.xmlbuild.gradle 文件中添加相应的数据库驱动依赖。例如,如果你使用的是 MySQL,那么你应该添加以下依赖:

xml
<!-- Maven -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
groovy
// Gradle
implementation 'mysql:mysql-connector-java'
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'

2. 配置数据源

application.propertiesapplication.yml 文件中配置你的数据源信息:

properties
# application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/your_db_name
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

或者

yaml
# application.yml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_db_name
    username: your_username
    password: your_password
    driver-class-name: com.mysql.cj.jdbc.Driver

3. 使用 JdbcTemplate

接下来,在你的服务层或控制器中注入 JdbcTemplate 并使用它来执行 SQL 查询或更新:

java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

@Service
public class YourService {

    private final JdbcTemplate jdbcTemplate;

    @Autowired
    public YourService(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public List<Map<String, Object>> findAll() {
        return jdbcTemplate.queryForList("SELECT * FROM your_table");
    }

    public void insert(String data) {
        jdbcTemplate.update("INSERT INTO your_table (column_name) VALUES (?)", data);
    }
}

4. 使用 RowMapper

对于复杂的查询结果,你可以使用 RowMapper 来将结果集映射到自定义的对象中:

java
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;

public class YourEntity {
    private String id;
    private String name;

    // getters and setters
}

public class YourEntityRowMapper implements RowMapper<YourEntity> {
    @Override
    public YourEntity mapRow(ResultSet rs, int rowNum) throws SQLException {
        YourEntity entity = new YourEntity();
        entity.setId(rs.getString("id"));
        entity.setName(rs.getString("name"));
        return entity;
    }
}

// 在服务类中使用
public List<YourEntity> findAll() {
    return jdbcTemplate.query("SELECT * FROM your_table", new YourEntityRowMapper());
}