📜  Spring JdbcTemplate中PreparedStatement的示例(1)

📅  最后修改于: 2023-12-03 15:35:03.398000             🧑  作者: Mango

Spring JdbcTemplate中PreparedStatement的示例

在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

下面是一个使用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数据库。