Spring JDBC 框架简介

yizhihongxing

下面是“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日

相关文章

  • mpvue微信小程序开发之实现一个弹幕评论

    mpvue微信小程序开发之实现一个弹幕评论 前言 在 mpvue 中使用一个基于 WebSocket 技术的弹幕评论系统可以增加小程序的用户参与度和互动效果。本文将带领读者一步步实现一个简单的弹幕评论系统。 准备 在开始开发之前,你需要在微信公众平台上注册一个小程序,并在本地搭建 mpvue 开发环境。另外,为了实现弹幕效果,你需要一个服务器来作为 WebS…

    Java 2023年5月23日
    00
  • java字符串中${}或者{}等的占位符替换工具类

    Java字符串中 ${} 或 {} 等占位符用于在字符串中嵌入变量,以便动态地构造字符串。在实际应用中,我们可能需要对包含占位符的字符串进行替换,这时候我们可以使用工具类来实现占位符替换功能。下面是占位符替换的完整攻略: 步骤一:创建工具类 创建一个 Java 工具类,用于实现占位符替换功能。核心代码如下: public class PlaceholderU…

    Java 2023年5月27日
    00
  • MyEclipse 配置SQL Server 2008数据库驱动操作步骤

    我们来详细讲解”MyEclipse配置SQL Server 2008数据库驱动操作步骤”的完整攻略。 确认MyEclipse版本和SQL Server版本 首先,需要确认你的MyEclipse版本和SQL Server版本。MyEclipse版本要求为10.x及以上,SQL Server版本要求为2008及以上。 下载SQL Server JDBC驱动 其次…

    Java 2023年6月16日
    00
  • 使用smartupload组件实现jsp+jdbc上传下载文件实例解析

    使用smartupload组件实现JSP+JDBC上传下载文件,需要经过以下步骤: 下载SmartUpload组件 从官方网站 http://smartupload.io/ 下载最新版本的SmartUpload组件(smartupload.jar),并将其添加到项目的classpath中。 配置Web.xml 在Web.xml中配置SmartUpload的处…

    Java 2023年6月15日
    00
  • 最适合人工智能开发的5种编程语言 附人工智能入门书籍

    最适合人工智能开发的5种编程语言,包括Python、Java、R语言、LISP和Prolog。这些编程语言不仅易学易用,而且拥有丰富的库和工具,能够方便地完成数据分析、机器学习、深度学习等多种人工智能任务。 Python Python是目前最常用的人工智能编程语言之一,甚至有人将其描述为“完美的人工智能编程语言”。Python易学易用,有丰富的库和工具,可实…

    Java 2023年5月19日
    00
  • Java 实现网络爬虫框架详细代码

    我将为您详细讲解Java 实现网络爬虫框架的攻略。 什么是网络爬虫 网络爬虫(英语:web crawler),也叫做网络蜘蛛(spider),是一种按照一定的规则和算法,自动访问万维网信息的程序或脚本。网络爬虫可以从互联网上自动获取信息,并通过许多处理方法对这些信息进行重组和筛选,从而给用户提供全面和高效的信息检索服务。 网络爬虫的实现 在Java中,我们可…

    Java 2023年5月19日
    00
  • SpringBoot在IDEA中实现热部署(JRebel实用版)

    接下来我就为大家分享一下如何在IDEA中使用JRebel实现Spring Boot热部署的完整攻略。 1. JRebel是什么 JRebel是一款Java热部署工具,可以在应用程序运行时重新加载Java类和资源文件,同时不需要重启服务器或应用程序。与传统的应用程序重新部署相比,这样可以显著提高开发效率。 2. Spring Boot项目配置JRebel 2.…

    Java 2023年5月19日
    00
  • 基于java实现画图板功能

    下面我将详细讲解“基于Java实现画图板功能”的完整攻略。 1. 确定项目需求 首先,我们需要明确项目的需求。画图板的主要功能有绘制基础图形(如线、矩形、圆形、椭圆等)、编辑已绘制图形(包括拖动、改变大小等操作)、实现撤销和重做等操作。我们需要仔细分析需求,确定实现细节,以指导后续的开发。 2. 选择合适的开发工具 接下来,我们需要选择合适的开发工具。Jav…

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