当前位置: 首页 > article >正文

使用 Spring JDBC 进行数据库操作:深入解析 JdbcTemplate

目录

1. Spring JDBC 简介

2. JdbcTemplate 介绍

3. 创建数据库和表

4. 配置 Spring JDBC

5. 创建实体类

6. 使用 JdbcTemplate 实现增、删、改、查操作

7. Spring JDBC 优点

8. 小结


1. Spring JDBC 简介

        Spring JDBC 是 Spring 框架中的一个模块,旨在简化数据库访问操作。它通过封装底层的 JDBC API,减少了繁琐的代码,提高了开发效率。传统的 JDBC 编程要求开发人员手动处理数据库连接、SQL 执行、错误处理以及资源释放等。而 Spring JDBC 通过提供 JdbcTemplate 类以及其他辅助工具,屏蔽了这些底层细节,使得数据库操作更加简单、直观且易于维护。

2. JdbcTemplate 介绍

JdbcTemplate 是 Spring 框架中用于简化 JDBC 操作的核心类,它对传统的 JDBC API 做了封装,提供了丰富的方法,方便开发人员进行数据库操作。主要的操作包括执行增、删、改、查等操作。

常用的 JdbcTemplate 方法类型
  1. execute 方法execute 方法可以用于执行任何 SQL 语句,一般用于执行 DDL(Data Definition Language)语句,比如创建表、删除表等。

    jdbcTemplate.execute("CREATE TABLE user (...);");
    
  2. update 和 batchUpdate 方法

    • update 用于执行新增、修改、删除等语句。
    • batchUpdate 用于批量执行 SQL 操作,可以显著提高效率。
    jdbcTemplate.update("INSERT INTO user (username, address) VALUES (?, ?)", "李连杰", "上海");
    
  3. query 和 queryForXXX 方法

    • query 用于查询返回多个结果的 SQL 语句。
    • queryForObjectqueryForList 等方法用于查询单个对象或列表。
    List<User> users = jdbcTemplate.query("SELECT * FROM user", new BeanPropertyRowMapper<>(User.class));
    
  4. call 方法call 方法用于执行数据库的存储过程或函数。

    jdbcTemplate.call("{CALL some_procedure(?)}", params);
    

3. 创建数据库和表

首先,我们需要在 MySQL 数据库中创建一个示例数据库,并在其中创建一个简单的用户表 user

CREATE DATABASE mybatis_demo;

USE mybatis_demo;

CREATE TABLE `user` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(32) NOT NULL COMMENT '用户名称',
  `birthday` DATETIME DEFAULT NULL COMMENT '生日',
  `sex` CHAR(1) DEFAULT NULL COMMENT '性别',
  `address` VARCHAR(256) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 插入一些示例数据
INSERT INTO `user` (`id`, `username`, `birthday`, `sex`, `address`) VALUES
(1, '老王', '2018-02-27 17:47:08', '男', '北京'),
(2, '熊大', '2018-03-02 15:09:37', '女', '上海'),
(3, '熊二', '2018-03-04 11:34:34', '女', '深圳'),
(4, '光头强', '2018-03-04 12:04:06', '男', '广州');

4. 配置 Spring JDBC

接下来,我们在 Spring 配置文件中添加数据库连接池和 JdbcTemplate 配置:

applicationContext.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 配置连接池 DriverManagerDataSource -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo"/>
        <property name="username" value="root"/>
        <property name="password" value="2020"/>
    </bean>

    <!-- 配置 JdbcTemplate -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

5. 创建实体类

在 Java 中,我们需要为 user 表创建一个实体类 User,该类的属性应与数据库表的列对应:

public class User {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    // getters and setters
}

6. 使用 JdbcTemplate 实现增、删、改、查操作

插入数据
@Test
public void testInsert() {
    String sql = "INSERT INTO user (username, address) VALUES (?, ?)";
    jdbcTemplate.update(sql, "李连杰", "上海");
}
更新数据
@Test
public void testUpdate() {
    String sql = "UPDATE user SET username = ?, address = ? WHERE id = ?";
    int result = jdbcTemplate.update(sql, "稳杰", "南海", 2);
    System.out.println("更新的记录数: " + result);
}
删除数据
@Test
public void testDelete() {
    String sql = "DELETE FROM user WHERE id = ?";
    int result = jdbcTemplate.update(sql, 18);
    System.out.println("删除的记录数: " + result);
}
查询数据(单表查询)
@Test
public void testQueryList() {
    String sql = "SELECT * FROM user WHERE address LIKE '%京%'";
    List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
    
    System.out.println("查询结果:");
    for (User user : users) {
        System.out.println(user);
    }
}
查询单个对象
@Test
public void testQueryForObject() {
    String sql = "SELECT * FROM user WHERE id = ?";
    User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), 1);
    System.out.println(user);
}

7. Spring JDBC 优点

  • 简化数据库操作JdbcTemplate 封装了 JDBC 操作,减少了开发人员手动处理数据库连接、异常捕获、资源释放等的工作。
  • 降低代码冗余:对于同类型的操作(如执行增删改查),不再需要写重复的代码,减少了开发工作量。
  • 支持事务管理:Spring JDBC 与 Spring 的事务管理无缝集成,能有效管理数据库事务。
  • 灵活性高:尽管 Spring JDBC 封装了很多常见操作,但它并没有限制开发人员的操作,开发者可以使用原生 SQL 执行任何复杂的数据库操作。

8. 小结

        通过使用 Spring JDBC 和 JdbcTemplate,我们可以大大简化数据库操作。Spring JDBC 提供了高效的资源管理、异常处理、SQL 执行等能力,使得开发人员能够更加专注于业务逻辑的实现,而不必纠结于底层的数据库操作细节。结合 Spring 的事务管理机制,可以保证数据库操作的可靠性和一致性。

        Spring JDBC 的强大功能,使其在许多中小型项目中成为数据库操作的首选方案,尤其是在不需要 ORM(如 Hibernate)框架的情况下,Spring JDBC 提供了简洁而高效的数据库访问方式。


http://www.kler.cn/a/528396.html

相关文章:

  • Spring Boot 实例解析:从概念到代码
  • 力扣017_最小覆盖字串题解----C++
  • idea修改模块名导致程序编译出错
  • Leetcode:219
  • Visual Studio Code修改terminal字体
  • 简要介绍C语言和c++的共有变量,以及c++特有的变量
  • dfs枚举问题
  • 【深度学习】softmax回归的从零开始实现
  • 想学习JAVA编程,请问应该如何去学习?
  • 深度学习之“线性代数”
  • DeepSeek超越ChatGPT的能力及部分核心原理
  • 算法【多重背包】
  • 【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(一)
  • 记7(激活函数+多层神经网络+梯度下降法及其优化
  • Unity3D仿星露谷物语开发26之创建场景控制管理器
  • 蓝桥杯刷题DAY1:前缀和
  • 项目练习:重写若依后端报错cannot be cast to com.xxx.model.LoginUser
  • C++ Primer 自定义数据结构
  • Linux-CentOS的yum源
  • 阶段一Python核心编程:走进Python编程的世界001
  • nth_element函数——C++快速选择函数
  • C语言:数组的介绍与使用
  • Excel 技巧23 - 在Excel中用切片器做出查询效果(★★★)
  • 4 [危机13小时追踪一场GitHub投毒事件]
  • javaEE-6.网络原理-http
  • Arduino可以做哪些有意思的项目