spring通过jdbc连接数据库

介绍

Spring Framework是一个非常受欢迎的Java应用程序开发框架。除了提供基于IoC容器和AOP的组件模型外,Spring还提供了众多的对事实标准技术的集成支持,数据库访问就是其中之一。在本篇文章中,我们将学习如何使用Spring提供的JDBC支持访问数据库。

前置知识

在开始之前,你需要具备以下技能:

  • Java基础知识,包括类、方法、包、接口、继承和多态。
  • Spring IoC容器的基本概念。
  • JDBC API和SQL基础知识。
  • 数据库的基本操作和语法,例如创建表、插入数据、查询数据等。

步骤

第一步:添加Maven依赖

在使用Spring JDBC连接数据库之前,你需要在Maven项目中添加以下依赖:

<!-- Spring JDBC依赖 -->
<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-jdbc</artifactId>
     <version>5.2.6.RELEASE</version>
</dependency>

<!-- 数据库驱动 -->
<dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>8.0.20</version>
</dependency>

其中,spring-jdbc是Spring JDBC模块的依赖;mysql-connector-java是MySQL数据库驱动程序的依赖。

第二步:创建数据源

创建数据源是连接数据库的第一步。数据源是一个代表数据库的对象,它存储连接到数据库的必要信息,例如驱动程序类名、URL、用户名、密码等。

可以使用Spring提供的DriverManagerDataSource类来创建简单的数据源。这里以连接MySQL数据库为例:

import org.springframework.jdbc.datasource.DriverManagerDataSource;

javax.sql.DataSource dataSource = new DriverManagerDataSource("jdbc:mysql://localhost:3306/mydb", "root", "password");

在实际生产环境中,你需要使用连接池来管理数据源,例如c3p0、HikariCP等,以提高连接的性能和可扩展性。

第三步:创建JdbcTemplate对象

创建JdbcTemplate对象是使用Spring JDBC的另一个重要步骤。JdbcTemplate是Spring提供的一个用于简化JDBC编程的类,它封装了大量的JDBC操作,例如执行SQL查询、更新、批处理等。

可以使用Spring提供的JdbcTemplate类来创建JdbcTemplate对象,可以将数据源作为构造函数的参数传递给它:

import org.springframework.jdbc.core.JdbcTemplate;

JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

第四步:执行SQL查询

JdbcTemplate类提供了执行SQL查询的多种方法。例如,可以使用queryForList()方法查询一个或多个行,并将结果存储在List对象中:

List<Map<String, Object>> rows = jdbcTemplate.queryForList("SELECT * FROM users");
for (Map<String, Object> row : rows) {
    System.out.println(row.get("id") + " " + row.get("name"));
}

另一个可以执行SQL查询的方法是queryForObject()。该方法执行一个SQL查询,并返回单个对象。例如,以下代码返回数据库中该名称对应的用户的id:

int userId = jdbcTemplate.queryForObject(
    "SELECT id FROM users WHERE name = ?", 
    new Object[] { "John" }, Integer.class);
System.out.println("User ID = " + userId);

第五步:执行SQL更新和插入操作

JdbcTemplate类提供了execute()方法执行SQL更新和插入操作,并返回更新/插入的行数:

int rowsUpdated = jdbcTemplate.update(
        "UPDATE users SET name = ? WHERE id = ?", 
        "David", 1);
System.out.println(rowsUpdated + " row(s) updated.");

int rowsInserted = jdbcTemplate.update(
        "INSERT INTO users (id, name) values (?, ?)", 
        2, "Tom");
System.out.println(rowsInserted + " row(s) inserted.");

示例

以下是两个JDBC和Spring结合的示例。

示例1:查询学生记录

以下示例展示了如何使用Spring JDBC访问MySQL数据库并执行查询操作。该程序从学生表中选择所有学生记录,并打印它们的名字和成绩。假设你已经有一个名为student的MySQL表格,其中包含以下带有两列的记录:姓名和成绩。

首先,创建以下数据库表:

CREATE TABLE student (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100),
    grade DOUBLE
);

然后,插入一些记录:

INSERT INTO student (name, grade) VALUES ('Alice', 3.7), ('Bob', 3.5), ('Charlie', 3.9);

接下来,创建以下Java代码,并将其放入一个名为JDBCExample的文件中:

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import javax.sql.DataSource;
import java.util.List;
import java.util.Map;

public class JDBCExample {
    public static void main(String[] args) {
        // 创建数据源
        DataSource dataSource = new DriverManagerDataSource(
                "jdbc:mysql://localhost:3306/mydb", "root", "password");

        // 创建JdbcTemplate对象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 执行SQL查询
        List<Map<String, Object>> rows = jdbcTemplate.queryForList(
                "SELECT * FROM student");
        for (Map<String, Object> row : rows) {
            System.out.println(row.get("name") + " " + row.get("grade"));
        }
    }
}

运行该程序,你应该看到以下输出:

Alice 3.7
Bob 3.5
Charlie 3.9

示例2:插入新的学生记录

以下示例展示了如何使用Spring JDBC访问MySQL数据库并执行插入操作。该程序向学生表中插入一条新记录。假设你已经有一个名为student的MySQL表格,其中包含以下带有两列的记录:姓名和成绩。

首先,创建以下数据库表:

CREATE TABLE student (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100),
    grade DOUBLE
);

然后,创建以下Java代码,并将其放入一个名为JDBCExample的文件中:

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import javax.sql.DataSource;

public class JDBCExample {
    public static void main(String[] args) {
        // 创建数据源
        DataSource dataSource = new DriverManagerDataSource(
                "jdbc:mysql://localhost:3306/mydb", "root", "password");

        // 创建JdbcTemplate对象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 插入新的学生记录
        int rowsInserted = jdbcTemplate.update(
                "INSERT INTO student (name, grade) VALUES (?, ?)", 
                "David", 3.8);
        System.out.println(rowsInserted + " row(s) inserted.");
    }
}

运行该程序,你应该看到以下输出:

1 row(s) inserted.

这个程序向学生表中插入了一条名叫David,成绩为3.8的记录。

总结

在本教程中,我们使用Spring JDBC模块连接到MySQL数据库并执行SQL查询、更新和插入操作。Spring JDBC模块为数据库交互提供了简单而有效的解决方案。它提供了许多有用的类和方法,使得与JDBC的交互变得更加简单和易于维护。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring通过jdbc连接数据库 - Python技术站

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

相关文章

  • 两个JSP页面父页面获取子页面内容的两种方法

    我们来详细讲解一下如何在JSP页面中实现父页面获取子页面内容的两种方法。 概述 在JSP中,子页面中可能会包含一些重要的内容,而父页面需要获取这些内容。常见的想法是通过使用JavaScript解析DOM树,但这种方法存在一些繁琐和困难。因此,在这里我们介绍两种非常简单的方法来实现该功能: 使用JSP隐式对象 使用标签 方法一:使用JSP隐式对象 JSP页面中…

    Java 2023年6月15日
    00
  • springboot使用Logback把日志输出到控制台或输出到文件

    下面是使用Spring Boot集成Logback将日志输出到控制台或文件的完整攻略。 步骤1: 添加Logback和Spring Boot的依赖 首先需要在pom.xml文件中添加Logback和Spring Boot的依赖: <!– Logback for logging –> <dependency> <groupId…

    Java 2023年5月26日
    00
  • Java手写持久层框架的详细代码

    为了写好一个Java手写持久层框架,我们需要掌握以下的知识点: 数据库连接池的使用 反射机制 注解技术 面向接口开发 在手写持久层框架中,我们需要为每一个实体类编写相应的映射文件,这个映射文件一般是编写在XML配置文件中。在配置文件中,我们需要指定实体类对应的数据库表名、各个属性与数据库表中字段的对应关系等信息。 以下是实现手写持久层框架的常用步骤: 编写核…

    Java 2023年5月20日
    00
  • Nginx 连接tomcat时会话粘性问题分析及解决方法

    Nginx 连接tomcat时会话粘性问题分析及解决方法 问题背景 在使用 Nginx 对 Tomcat 进行反向代理时,如果不做任何特殊处理,有可能出现会话粘性问题,即同一个用户的请求被转发到了不同的 Tomcat 实例上,导致会话信息丢失,从而导致用户操作失败。 问题分析 会话粘性问题的根本原因是访问服务器时没有考虑到会话信息,导致同一用户的请求在多个服…

    Java 2023年6月16日
    00
  • java中Lamda表达式讲解

    下面是”Java中Lambda表达式讲解”的完整攻略: Lambda表达式简介 Lambda表达式是Java 8中引入的一种函数式编程方式,可以将一个操作或行为作为参数传递给方法或lambda表达式本身。Lambda表达式可以使代码更简洁、简单、面向对象,同时大大提高了Java编程的灵活性和可读性。 Lambda表达式有三个部分组成:参数列表、箭头“-&gt…

    Java 2023年5月26日
    00
  • JavaWeb实战之开发网上购物系统(超详细)

    JavaWeb实战之开发网上购物系统(超详细) 完整攻略 系统需求 为了方便读者更好地理解开发过程,我们假设我们要开发一个网上购物系统,该系统需要满足以下基本需求: 用户可以浏览商品信息,并将商品添加进购物车。 用户可以查看购物车中的商品,并对购物车中的商品进行结算。 用户可以对订单进行在线支付。 管理员可以管理商品信息,包括添加商品、删除商品、修改商品信息…

    Java 2023年5月24日
    00
  • JSP模板应用指南(上)

    JSP模板应用指南(上)完整攻略 什么是JSP模板 JSP模板即Java Server Pages的模板,是一种基于Java技术的Web开发技术。JSP模板将HTML文档和Java代码结合起来,通过JSP引擎最终生成一个可执行的Servlet程序。 JSP模板的特点 便于开发和维护 不需要额外学习其他的模板语言 实现数据和功能的封装 支持高级特性 JSP模板…

    Java 2023年6月15日
    00
  • 什么是线程安全的集合?

    以下是关于线程安全的集合的完整使用攻略: 什么是线程安全的集合? 线程安全的集合是指多个线程可以同时访问的集合,而不会出现数据不一致或程序崩溃等问题。在多线程编程中,线程安全的集合是非常重要的,因为多个线程同时访问集合时,可能会出现线程间争用的问题,导致数据不一致或程序崩溃。 线程全的集合的示例 以下两个示例,分别演示了线程安全的集合的实现过程。 示例一:线…

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