📅  最后修改于: 2023-12-03 15:35:03.398000             🧑  作者: Mango
在Spring框架中,使用JdbcTemplate来访问和操作数据库可以减少很多样板式代码,并且保证了安全和可靠性。其中,PreparedStatement可用于执行参数化的查询语句,大大提高了数据库操作性能和安全性。
在Maven项目中,需要在pom.xml中引入spring-jdbc依赖。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.9</version>
</dependency>
Spring框架中可以通过Java配置或XML配置来配置数据源,这里以Java配置为例。
@Configuration
public class DatabaseConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb?useSSL=false");
dataSource.setUsername("root");
dataSource.setPassword("123456");
return dataSource;
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate;
}
}
下面是一个使用PreparedStatement的示例,查询数据库中status为1的所有用户信息。
public List<User> findByStatus(int status) {
String sql = "SELECT * FROM users WHERE status = ?";
List<User> users = jdbcTemplate.query(sql, new Object[]{status}, new UserRowMapper());
return users;
}
private class UserRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
user.setAge(resultSet.getInt("age"));
user.setStatus(resultSet.getInt("status"));
return user;
}
}
在SQL语句中,使用?
占位符来代替动态的参数。在执行查询时,需要使用query
方法,并传入SQL语句、占位符参数数组和结果集映射器。这里我们实现了UserRowMapper
来将查询结果映射为User
对象。
使用PreparedStatement可以在Java中高效地执行多个查询,以及减少SQL注入攻击的风险。我们通过 Spring JdbcTemplate 和 PreparedStatement 来演示了如何通过 Spring 访问MySQL数据库。