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日

相关文章

  • Hibernate识别数据库特有字段实例详解

    让我为您详细讲解“Hibernate识别数据库特有字段实例详解”的完整攻略。 在使用Hibernate进行开发时,有些时候我们需要识别一些数据库特有的字段,如MySQL中的ENUM类型、PostgreSQL中的ARRAY类型等。这些字段并不在Hibernate的基础数据类型中,所以我们需要进行额外配置。 下面是如何识别MySQL中的ENUM类型的示例: 首先…

    Java 2023年5月20日
    00
  • Java模拟多线程实现抢票代码实例

    以下是关于“Java模拟多线程实现抢票代码实例”的详细攻略: 什么是多线程 多线程是指在同一程序中,多个线程同时运行,实现多个任务同时执行的一种编程方式。在Java中,线程是比进程更小的执行单元,每个线程都可以独立地运行和完成自己的任务。 实现多线程的两种方式 继承Thread类 通过继承Thread类并重写它的run()方法来实现多线程。重写run()方法…

    Java 2023年5月18日
    00
  • 如何实现线程安全的队列?

    以下是关于线程安全的队列的完整使用攻略: 什么是线程安全的队列? 线程安全的队列是指在线程环境下,多个线同时访问队列中的元素而会出现数据不一致或程序崩溃等问题。在线程编程中,线程安全的队列是非常重要的,因为多个线程同时访问队列,会出现线程争用的问题,导致数据不一致或程序崩溃。 如何实现线程安全的队列? 为实现线程安全的列,需要使用同步机制来保证多线程对队列的…

    Java 2023年5月12日
    00
  • 35道SpringBoot面试题及答案(小结)

    下面是对于 “35道SpringBoot面试题及答案(小结)” 的详细讲解: 概述 该篇文章主要包含了35道关于Spring Boot的面试题及详细的答案解析,可以帮助读者更好地了解Spring Boot的使用和原理。同时也适用于准备面试的读者,可以通过该篇文章来检验自身的学习掌握情况以及提高面试通过率。 答案解析 文章主要分为以下几个部分: Spring …

    Java 2023年5月15日
    00
  • Spring Boot整合mybatis使用注解实现动态Sql、参数传递等常用操作(实现方法)

    下面来详细讲解“Spring Boot整合MyBatis使用注解实现动态SQL、参数传递等常用操作(实现方法)”的完整攻略,包括以下几个方面: 环境准备: 在使用MyBatis前,需要包含所需的依赖包,这里我们将使用Maven管理依赖进行配置。在pom.xml文件中添加以下代码: <dependency> <groupId>org.m…

    Java 2023年5月20日
    00
  • 云服务器(Linux)安装部署Kafka的详细过程

    云服务器(Linux)安装部署Kafka的详细过程 作为一种分布式消息系统,Kafka 可以快速处理大规模的实时数据。在云服务器中进行 Kafka 的部署和安装,可以更加方便地管理和维护 Kafka 的使用。 1. 安装 Java 环境 由于 Kafka 是基于 Java 编写的,因此在开始安装 Kafka 之前,需要先安装 Java 环境(JDK 8 或以…

    Java 2023年5月20日
    00
  • Java轻松掌握面向对象的三大特性封装与继承和多态

    Java是一门面向对象编程语言,而面向对象编程的三大特性为封装、继承和多态。下面将为大家介绍如何轻松掌握这三大特性。 封装 封装是指将类的属性和方法包装在一起,隐藏了类的实现细节,使得类的使用者只需关注类的功能而不必关心其内部实现。Java中可以通过public、private、protected、default等访问修饰符来实现封装。 以下是一个示例代码,…

    Java 2023年5月26日
    00
  • java的Hibernate框架报错“AssertionFailure”的原因和解决方法

    当使用Java的Hibernate框架时,可能会遇到“AssertionFailure”错误。这个错误通常是由于以下原因之一引起的: 断言失败:如果您的断言失败,则可能会出现此错误。在这种情况下,需要检查您的代码以解决此问题。 数据库操作失败:如果您的数据库操作失败,则可能会出现此错误。在这种情况下,需要检查您的数据库操作以解决此问题。 以下是两个实例说明:…

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