Spring JdbcTemplate执行数据库操作详解
什么是Spring JdbcTemplate?
Spring JdbcTemplate是Spring框架提供的一个用于简化数据库访问和操作的工具类,它可以轻松地完成基础数据操作,如增删改查等。
Spring JdbcTemplate的主要特点包括:
- 简化的JDBC操作;
- 与Spring的事务管理集成;
- 提供了多种查询结果映射方式;
- 提供了异常处理机制等。
如何使用Spring JdbcTemplate?
1. 添加Maven依赖
要使用Spring JdbcTemplate,先需要添加相关的Maven依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
2. 配置数据源
在Spring框架中使用JdbcTemplate,需要配置数据源,在Spring Boot项目中默认使用的是HikariCP连接池,所以只需要在application.properties文件中添加相应的配置即可:
# MySQL
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=xxxxx
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
3.注入JdbcTemplate实例
完成数据源的配置之后,需要注入JdbcTemplate实例,使用@Autowire将JdbcTemplate注入到Bean中:
@Repository
public class DaoImpl implements Dao {
@Autowired
private JdbcTemplate jdbcTemplate;
}
4.使用JdbcTemplate完成数据库操作
使用JdbcTemplate完成数据库操作,可以采用编写SQL语句和使用预编译的方式两种方式。
1)编写SQL语句
可以使用execute()执行增、删、改等操作,使用query()执行查询操作。
@Repository
public class DaoImpl implements Dao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void addUser(User user) {
String sql = "INSERT INTO user (name, age) VALUES (?, ?)";
jdbcTemplate.update(sql, user.getName(), user.getAge());
}
@Override
public void delUser(Long id) {
String sql = "DELETE FROM user WHERE id = ?";
jdbcTemplate.update(sql, id);
}
@Override
public void updateUser(User user) {
String sql = "UPDATE user SET name = ?, age = ? WHERE id = ?";
jdbcTemplate.update(sql, user.getName(), user.getAge(), user.getId());
}
@Override
public User getUserById(Long id) {
String sql = "SELECT * FROM user WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), id);
}
}
2)使用预编译的方式
使用JdbcTemplate的预编译的SQL语句可以有效的提高数据库的性能。
@Repository
public class DaoImpl implements Dao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void addUser(User user) {
String sql = "INSERT INTO user (name, age) VALUES (?, ?)";
jdbcTemplate.update(conn -> {
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, user.getName());
ps.setInt(2, user.getAge());
return ps;
});
}
@Override
public void delUser(Long id) {
String sql = "DELETE FROM user WHERE id = ?";
jdbcTemplate.update(sql, id);
}
@Override
public void updateUser(User user) {
String sql = "UPDATE user SET name = ?, age = ? WHERE id = ?";
jdbcTemplate.update(conn -> {
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, user.getName());
ps.setInt(2, user.getAge());
ps.setLong(3, user.getId());
return ps;
});
}
@Override
public User getUserById(Long id) {
String sql = "SELECT * FROM user WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(User.class));
}
}
JdbcTemplate执行数据库操作示例
以学生信息为例,在MySQL数据库中创建一个名为student的表,包括id、name、age三个字段。
1.插入数据示例
public void add(Student student) {
String sql = "INSERT INTO student (name,age) VALUES (:name,:age)";
SqlParameterSource parameters = new BeanPropertySqlParameterSource(student);
namedParameterJdbcTemplate.update(sql, parameters);
}
其中,使用bean对象封装了学生的姓名和年龄,使用namedParameterJdbcTemplate插入数据。
2.更新数据示例
public void update(Student student) {
String sql = "UPDATE student SET name=:name,age=:age where id=:id";
SqlParameterSource parameters = new BeanPropertySqlParameterSource(student);
namedParameterJdbcTemplate.update(sql, parameters);
}
使用bean对象封装学生的姓名、年龄和id,使用namedParameterJdbcTemplate根据id更新学生信息。
总结
以上是使用Spring JdbcTemplate执行数据库操作的详细攻略,尽管JdbcTemplate对JDBC进行了封装,可以使开发者更加方便的进行SQL操作,但开发者在操作数据库时,还是需要谨慎对待并添加相应的安全措施避免出现安全问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring JdbcTemplate执行数据库操作详解 - Python技术站