主题
使用 JdbcTemplate 访问关系型数据库
在 Spring Boot 中,JdbcTemplate
是一个非常强大的工具,用于执行基本的 JDBC 操作。它提供了比原生 JDBC 更高级的错误处理和资源管理机制,使得开发人员可以更专注于业务逻辑而不是底层的数据库操作细节。
下面是如何在 Spring Boot 应用中使用 JdbcTemplate
的步骤:
1. 引入依赖
首先,你需要在你的 pom.xml
或 build.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.properties
或 application.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());
}