在Spring框架中,JdbcTemplate
是一个非常强大的工具,用于简化对JDBC的访问。它提供了类型安全的方法,减少了代码编写量,并且能够处理常见的错误处理逻辑,比如关闭资源、转换异常等。
下面是一些基本步骤和示例,说明如何使用 JdbcTemplate
操作数据库。
1. 配置 DataSource
首先,你需要配置一个 DataSource
,这是所有JDBC访问的基础。这可以通过XML配置或Java配置来完成。
XML配置示例:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
Java配置示例:
@Configuration
public class JdbcConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("root");
dataSource.setPassword("password");
return dataSource;
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
2. 使用 JdbcTemplate 进行数据库操作
增加记录
@Autowired
private JdbcTemplate jdbcTemplate;
public void addPerson(String name, int age) {
jdbcTemplate.update(
"INSERT INTO person (name, age) VALUES (?, ?)",
name, age
);
}
查询记录
public Person findPersonById(long id) {
return jdbcTemplate.queryForObject(
"SELECT * FROM person WHERE id = ?",
new Object[]{id},
new BeanPropertyRowMapper<>(Person.class)
);
}
// 或者使用 RowMapper 自定义映射逻辑
public List<Person> findPersonsByName(String name) {
return jdbcTemplate.query(
"SELECT * FROM person WHERE name LIKE ?",
new Object[]{"%" + name + "%"},
(rs, rowNum) -> {
Person person = new Person();
person.setId(rs.getLong("id"));
person.setName(rs.getString("name"));
person.setAge(rs.getInt("age"));
return person;
}
);
}
更新记录
public void updatePerson(long id, String newName) {
jdbcTemplate.update(
"UPDATE person SET name = ? WHERE id = ?",
newName, id
);
}
删除记录
public void deletePerson(long id) {
jdbcTemplate.update(
"DELETE FROM person WHERE id = ?",
id
);
}
3. 异常处理
JdbcTemplate
会自动处理常见的JDBC异常,并将其转换为Spring的 DataAccessException
类型的异常。如果你需要更具体的异常处理,可以通过捕获这些异常并进行相应的处理。
示例完整代码
这里是一个简单的例子,演示如何使用 JdbcTemplate
来增加一条记录和查询一条记录:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class PersonRepository {
private final JdbcTemplate jdbcTemplate;
@Autowired
public PersonRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void addPerson(String name, int age) {
jdbcTemplate.update(
"INSERT INTO person (name, age) VALUES (?, ?)",
name, age
);
}
public Person findPersonById(long id) {
return jdbcTemplate.queryForObject(
"SELECT * FROM person WHERE id = ?",
new Object[]{id},
new BeanPropertyRowMapper<>(Person.class)
);
}
}
请注意,实际应用中你可能还需要处理一些异常情况,并且根据具体的需求进行调整。此外,上述代码假设你已经有了一个 Person
类,该类包含 id
, name
, 和 age
属性,并且已经设置了相应的数据库表结构。