介绍
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技术站