Spring(23) JdbcTemplate 使用简介

目录

    • 一、简介
    • 二、使用介绍
      • 2.1 Maven 信息
      • 2.2 配置数据源
      • 2.3 JdbcTemplate 使用
        • 1)execute() 方法
        • 2)update() 方法
        • 3)queryXxx() 方法

一、简介

背景:

  • JDBC 已经能够满足大部分用户最基本的需求,但是在使用 JDBC 时,必须自己来管理数据库资源,例如:
  • 获取 PreparedStatement、设置 SQL 语句参数、关闭连接等步骤。

定义:

JdbcTemplateSpring 框架中用于简化数据库访问的类。它封装了 JDBC 的细节,并提供了便捷的方法来执行 SQL 语句和处理结果。JdbcTemplate 是 Spring 的一部分,它处理了资源的建立和释放,帮助我们避免一些常见的错误,比如:忘记关闭连接等。它运行核心的 JDBC 工作流,如 Statement 的建立和执行,而我们只需要提供 SQL 语句和提取结果。

二、使用介绍

以下是一个简单的例子,展示了如何使用 JdbcTemplate 来操作数据库中的用户信息。

2.1 Maven 信息

首先,确保你的项目中包含了 Spring JDBC 的依赖。如果你使用 Maven,可以在 pom.xml 文件中添加以下依赖:


<dependency>
	<groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-data-jdbcartifactId>
dependency>

<dependency>
	<groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-jdbcartifactId>
dependency>

<dependency>
	<groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
    <scope>runtimescope>
dependency>

2.2 配置数据源

然后,配置你的数据源。在 Spring Boot 项目中,通常使用 application.propertiesapplication.yml 文件完成:

# application.properties 示例
spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

2.3 JdbcTemplate 使用

现在,你可以在你的服务类或 DAO 类中注入 JdbcTemplate 并使用它。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
  
@Service  
public class UserService {  
  
    private final JdbcTemplate jdbcTemplate;  
  
    @Autowired  
    public UserService(JdbcTemplate jdbcTemplate) {  
        this.jdbcTemplate = jdbcTemplate;  
    }

    // ...
}

在 JdbcTemplate 中执行 SQL 语句的方法大致分为 3 大类:

  • execute():可以执行所有 SQL 语句,一般用于执行 DDL 语句。
  • update():用于执行 INSERT、UPDATE、DELET 等 DML 语句。
  • queryXxx():用于 DQL 数据查询语句。
1)execute() 方法

execute() 方法是 JdbcTemplate 中最通用的方法,可以用于执行任何 SQL 语句。这个方法通常用于执行 DDL(数据定义语言)语句,比如:创建表、修改表结构等,但它也可以用于执行其他类型的 SQL 语句。

用法一:无返回结果的示例(DDL语句)

import org.springframework.jdbc.core.JdbcTemplate;

// ... 其他代码,比如数据源的配置、JdbcTemplate 的实例化 ...

public void createTable() {
    String sql = "CREATE TABLE t_user (id INT PRIMARY KEY, name VARCHAR(50))";
    jdbcTemplate.execute(sql);
}

用法二:有返回结果的示例(使用 ConnectionCallback)

虽然 execute() 方法本身不直接返回查询结果,但你可以通过传递一个 ConnectionCallback 来处理查询结果。这通常不是 execute() 方法的典型用法,因为对于查询来说,更推荐使用 queryXxx() 方法。然而,为了说明可以通过 execute() 方法处理结果,这里提供一个 非典型用法的示例

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ConnectionCallback;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

// ... 其它代码 ...

public void executeWithResult() {
    String sql = "SELECT COUNT(*) FROM t_user";
    jdbcTemplate.execute(new ConnectionCallback<Integer>() {
        @Override
        public Integer doInConnection(Connection con) throws SQLException {
            Statement stmt = con.createStatement();
            ResultSet rs = stat.executeQuery(sql);
            if (rs.next()) {
                return rs.getInt(1); // 返回查询结果的第一列值
            }
            return 0; // 如果没有结果,返回0
        }
    });
}

注意: 上面的示例中,我们实际上绕过了 JdbcTemplate 的大部分功能(比如异常处理和资源管理)。在实际应用中,应该尽量避免这样的用法,而是使用 JdbcTemplate 提供的更高级别的查询方法。

2)update() 方法

update() 方法用于执行 INSERT、UPDATE 和 DELETE 等 DML(数据操纵语言)语句。这些方法通常返回一个整数,表示受影响的行数。

import org.springframework.jdbc.core.JdbcTemplate;

// ... 其它代码 ...

/** 插入用户 */
public void insertUser(int id, String name) {
    String sql = "INSERT INTO t_user (id, name) VALUES (?, ?)";
    jdbcTemplate.update(sql, id, name);
}
/** 根据id更新姓名 */
public void updateUserName(int id, String newName) {
    String sql = "UPDATE t_user SET name = ? WHERE id = ?";
    jdbcTemplate.update(sql, newName, id);
}
/** 根据id删除用户 */
public void deleteUser(int id) {
    String sql = "DELETE FROM t_user WHERE id = ?";
    jdbcTemplate.update(sql, id);
}
3)queryXxx() 方法

queryXxx() 方法用于执行 DQL(数据查询语言)语句,并返回查询结果。这些方法有很多变体,可以根据查询结果的类型选择不同的方法。

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

// ... 其它代码 ...

public List<User> getAllUsers() {
    String sql = "SELECT id, name FROM t_user";
    return jdbcTemplate.query(sql, new RowMapper<User>() {
        @Override
        public User mapRow(ResultSet rs, int rowNum) throws SQLException {
            User user = new User(); // 假设有一个 User 类
            user.setId(rs.getInt("id"));
            user.setName(rs.getString("name"));
            return user;
        }
    });
}
/** 假设有一个 User 类,其定义可能如下:*/
class User {
    private int id;
    private String name;
    // getter、setter 方法省略...
}

整理完毕,完结撒花~





参考地址:

1.JdbcTemplate基本使用,https://blog.csdn.net/weixin_40001125/article/details/88538576

你可能感兴趣的:(Spring,spring,数据库,java)