Spring JDBC 框架简介

下面是“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技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Sprint Boot @JsonProperty使用方法详解

    @JsonProperty是Spring Boot中的一个注解,用于指定Java对象在序列化为JSON字符串时的属性名。在本文中,我们将详细介绍@JsonProperty注解的作用和使用方法,并提供两个示例。 @JsonProperty注解的作用 @JsonProperty注解用于指定Java对象在序列化为JSON字符串时的属性名。当使用@JsonPrope…

    Java 2023年5月5日
    00
  • Springboot使用Security实现OAuth2授权验证完整过程

    下面我为大家详细讲解Spring boot使用Security实现OAuth2授权验证的完整流程。 1. OAuth2介绍 OAuth2是一种常用的授权框架,可以使得第三方应用程序获得用户的授权才能访问用户的资源。OAuth2的主要授权方式有4种: 1.1 授权码模式(Authorization Code) 授权码模式是OAuth2中最常用的一种模式。其要求…

    Java 2023年5月20日
    00
  • 玩转spring boot MVC应用(2)

    “玩转springbootMVC应用(2)”是一个关于如何使用Spring Boot构建Web应用程序的攻略。在本攻略中,我们将详细讲解如何使用Spring Boot MVC来构建Web应用程序,并提供两个示例来演示如何使用Spring Boot MVC。 添加依赖 首先,我们需要在pom.xml文件中添加Spring Boot MVC的依赖。以下是一个示例…

    Java 2023年5月14日
    00
  • Java父线程(或是主线程)等待所有子线程退出的实例

    Java父线程(或是主线程)等待所有子线程退出的实例,可以通过使用Thread的join()方法实现。 join()方法的功能是等待该线程执行结束,即阻塞等待该线程结束,然后再继续执行下面的代码。我们可以利用该方法等待所有子线程执行结束,从而达到等待所有子线程退出的目的。 下面是一个完整的示例代码: public class MainThread { pub…

    Java 2023年5月19日
    00
  • Maven 修改tomcat运行版本和端口的实现方法

    以下是“Maven 修改 Tomcat 运行版本和端口的实现方法”的攻略。 介绍 Maven是一个Java项目管理工具,可以自动化构建,依赖管理,以及项目信息管理。它的一个重要作用就是可以将项目打包成一个可以部署的War包。而Tomcat是一个Java Web应用程序服务器,可以运行打包好的War包。 在Maven的项目中,我们可以使用插件来管理Tomcat…

    Java 2023年5月20日
    00
  • Java如何实现字符串每隔4位加空格

    Java如何实现字符串每隔4位加空格,可以通过如下方式实现: 1.使用正则表达式 Java中可以使用正则表达式对字符串进行匹配和替换。我们可以使用正则表达式来定义每四个字符后需要加上一个空格。 具体的代码实现如下: public String addSpace(String str) { return str.replaceAll("(.{4})&…

    Java 2023年5月26日
    00
  • JavaWeb中导出excel文件的简单方法

    下面是JavaWeb中导出Excel文件的简单方法的完整攻略。 步骤一:导入相关的依赖 在项目中导出Excel文件,需要用到POI库。因此需要在pom.xml中导入相关的依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</…

    Java 2023年5月26日
    00
  • SpringBoot复杂参数应用详细讲解

    SpringBoot复杂参数应用详细讲解 在SpringBoot中,我们可以很方便地绑定和处理各种类型的请求参数,包括简单的字符串和数字,以及复杂的对象和集合类型。在本文中,我们将详细介绍如何处理复杂的请求参数,包括Bean对象、List和Map集合类型等。 1. Bean对象参数 对于Bean对象类型的参数,我们可以通过在控制器方法中直接声明该对象的参数来…

    Java 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部