下面是“Spring JDBC 框架简介”的详细攻略。
1. Spring JDBC 简介
Spring JDBC 框架是通过 JDBC API 来访问关系型数据库的一个全面的框架。Spring JDBC 包含如下四个关键组件:JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcInsert 和 SimpleJdbcCall。
- JdbcTemplate:它是 Spring JDBC 的核心类,提供了 Spring 与其他数据访问技术(如 Hibernate)整合的基础。
- NamedParameterJdbcTemplate:它是对 JdbcTemplate 的扩展,支持命名参数,可以让我们通过名称指定参数,提高了程序的可读性。
- SimpleJdbcInsert:它可以简化插入操作的代码。在许多情况下,我们只需要插入一行数据,并且不需要返回主键值。SimpleJdbcInsert 可以让我们省略编写 INSERT SQL 语句的过程。
- SimpleJdbcCall:它用于执行存储过程。使用 SimpleJdbcCall,我们可以通过传入存储过程名称和参数来调用存储过程。
2. JdbcTemplate 示例
JdbcTemplate 是 Spring JDBC 的核心类,下面我们来看一个 JdbcTemplate 的示例。我们将使用 MySQL 数据库中的一个表(student),这个表有三个字段(id,name 和 age),表示学生的信息。我们将通过 JdbcTemplate 对这个表进行 CRUD 操作。
2.1. 导入依赖
首先,我们需要导入 Spring JDBC 和 MySQL 的依赖,例如在 Maven 中,我们可以添加以下依赖到 pom.xml 文件:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
2.2. 配置数据源
接下来,我们需要配置数据源。在 Spring Boot 中,可以直接在 application.properties 文件中配置,例如:
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
2.3. 编写 JdbcTemplate 示例代码
现在我们可以编写 JdbcTemplate 示例代码,示例代码如下所示:
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
public class StudentJdbcTemplate {
private final JdbcTemplate jdbcTemplate;
public StudentJdbcTemplate(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public void create(String name, Integer age) {
String sql = "INSERT INTO student (name, age) VALUES (?, ?)";
jdbcTemplate.update(sql, name, age);
}
public Student findById(Long id) {
String sql = "SELECT * FROM student WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new StudentRowMapper(), id);
}
public List<Student> findAll() {
String sql = "SELECT * FROM student";
return jdbcTemplate.query(sql, new StudentRowMapper());
}
public void update(Long id, String name, Integer age) {
String sql = "UPDATE student SET name = ?, age = ? WHERE id = ?";
jdbcTemplate.update(sql, name, age, id);
}
public void deleteById(Long id) {
String sql = "DELETE FROM student WHERE id = ?";
jdbcTemplate.update(sql, id);
}
private static class StudentRowMapper implements RowMapper<Student> {
@Override
public Student mapRow(ResultSet resultSet, int i) throws SQLException {
Student student = new Student();
student.setId(resultSet.getLong("id"));
student.setName(resultSet.getString("name"));
student.setAge(resultSet.getInt("age"));
return student;
}
}
}
上面的代码中,我们定义了一个 StudentJdbcTemplate 类,它包含了对 student 表的所有 CRUD 操作。我们可以在 Controller 中使用 StudentJdbcTemplate 类来进行数据访问,示例代码如下所示:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/students")
public class StudentController {
private final StudentJdbcTemplate studentJdbcTemplate;
@Autowired
public StudentController(StudentJdbcTemplate studentJdbcTemplate) {
this.studentJdbcTemplate = studentJdbcTemplate;
}
@PostMapping("")
public void create(@RequestParam String name, @RequestParam Integer age) {
studentJdbcTemplate.create(name, age);
}
@GetMapping("/{id}")
public Student findById(@PathVariable Long id) {
return studentJdbcTemplate.findById(id);
}
@GetMapping("")
public List<Student> findAll() {
return studentJdbcTemplate.findAll();
}
@PutMapping("/{id}")
public void update(@PathVariable Long id, @RequestParam String name, @RequestParam Integer age) {
studentJdbcTemplate.update(id, name, age);
}
@DeleteMapping("/{id}")
public void deleteById(@PathVariable Long id) {
studentJdbcTemplate.deleteById(id);
}
}
3. NamedParameterJdbcTemplate 示例
NamedParameterJdbcTemplate 是对 JdbcTemplate 的扩展,它支持命名参数,可以让我们通过名称指定参数,提高了程序的可读性。
3.1. 导入依赖
同样,我们需要导入 Spring JDBC 和 MySQL 的依赖,前面已经提到。
3.2. 配置数据源
同样,我们需要配置数据源,前面已经提到。
3.3. 编写 NamedParameterJdbcTemplate 示例代码
现在我们可以编写 NamedParameterJdbcTemplate 示例代码。假设我们要查询 student 表中符合条件的记录,我们可以使用 NamedParameterJdbcTemplate 来构建查询条件。示例代码如下所示:
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class StudentNamedParameterJdbcTemplate {
private final NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public StudentNamedParameterJdbcTemplate(DataSource dataSource) {
this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
public List<Student> findByNameAndAge(String name, Integer age) {
String sql = "SELECT * FROM student WHERE name = :name AND age = :age";
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("name", name);
paramMap.put("age", age);
return namedParameterJdbcTemplate.query(sql, paramMap, new StudentRowMapper());
}
}
上面的代码中,我们定义了一个 StudentNamedParameterJdbcTemplate 类,包含了一个使用命名参数的查询操作。在这个示例中,我们构建了一个 Map 对象,将参数名和参数值放到这个 Map 中,然后在查询时传递这个 Map 对象。我们可以在 Controller 中使用 StudentNamedParameterJdbcTemplate 类来进行数据访问,示例代码如下所示:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/students")
public class StudentController {
private final StudentNamedParameterJdbcTemplate studentNamedParameterJdbcTemplate;
@Autowired
public StudentController(StudentNamedParameterJdbcTemplate studentNamedParameterJdbcTemplate) {
this.studentNamedParameterJdbcTemplate = studentNamedParameterJdbcTemplate;
}
@GetMapping("")
public List<Student> findByNameAndAge(@RequestParam String name, @RequestParam Integer age) {
return studentNamedParameterJdbcTemplate.findByNameAndAge(name, age);
}
}
总结
到这里,我们已经完成了 Spring JDBC 框架的一个简单介绍和两个示例:JdbcTemplate 示例和 NamedParameterJdbcTemplate 示例。通过这两个示例,我们可以看到 Spring JDBC 的便捷之处,可以让我们更专注于业务逻辑的开发,而不必过多地操心数据访问的细节。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring JDBC 框架简介 - Python技术站