创建一个 JdbcService,并通过 Spring Boot 直接运行 SQL

server/2025/2/20 21:13:32/

创建一个 JdbcService,并通过 Spring Boot 直接运行 SQL

    • 前言
    • 1. 环境准备
      • 1.1 依赖配置
      • 1.2 配置文件
    • 2. 创建 `JdbcService`
      • 2.1 定义 `JdbcService`
      • 2.2 使用 `JdbcService`
    • 3. 运行示例
      • 3.1 创建表
      • 3.2 插入数据
      • 3.3 查询数据
      • 3.4 更新数据
      • 3.5 删除数据
    • 4. 安全性注意事项
    • 5. 总结


前言

在 Spring Boot 中,使用 JDBC 直接运行 SQL 是一种常见的操作,尤其是在需要执行原生 SQL 或复杂查询时。下面是一个完整的示例,展示如何创建一个 JdbcService,并通过 Spring Boot 直接运行 SQL。


1. 环境准备

1.1 依赖配置

pom.xml 中添加以下依赖:

<dependencies><!-- Spring Boot Starter JDBC --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- 数据库驱动(以 MySQL 为例) --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- Spring Boot Starter Web(可选,用于创建 REST API) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

1.2 配置文件

application.properties 中配置数据库连接信息:

spring.datasource.url=jdbc:mysql://localhost:3306/testdb
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

2. 创建 JdbcService

2.1 定义 JdbcService

创建一个 JdbcService 类,用于执行 SQL 语句。我们将使用 Spring 的 JdbcTemplate 来简化 JDBC 操作。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.Map;@Service
public class JdbcService {@Autowiredprivate JdbcTemplate jdbcTemplate;/*** 执行查询 SQL,返回结果列表** @param sql  SQL 语句* @return 查询结果(每行数据以 Map 形式存储)*/public List<Map<String, Object>> query(String sql) {return jdbcTemplate.queryForList(sql);}/*** 执行更新 SQL(如 INSERT、UPDATE、DELETE)** @param sql SQL 语句* @return 受影响的行数*/public int update(String sql) {return jdbcTemplate.update(sql);}/*** 执行任意 SQL 语句** @param sql SQL 语句*/public void execute(String sql) {jdbcTemplate.execute(sql);}
}

2.2 使用 JdbcService

在控制器或服务中注入 JdbcService,并调用其方法执行 SQL。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.Map;@RestController
public class JdbcController {@Autowiredprivate JdbcService jdbcService;/*** 查询接口** @param sql SQL 查询语句* @return 查询结果*/@GetMapping("/query")public List<Map<String, Object>> query(@RequestParam String sql) {return jdbcService.query(sql);}/*** 更新接口** @param sql SQL 更新语句* @return 受影响的行数*/@GetMapping("/update")public int update(@RequestParam String sql) {return jdbcService.update(sql);}/*** 执行任意 SQL 接口** @param sql SQL 语句* @return 执行结果*/@GetMapping("/execute")public String execute(@RequestParam String sql) {jdbcService.execute(sql);return "SQL 执行成功";}
}

3. 运行示例

3.1 创建表

在数据库中创建一个测试表:

sql">CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),age INT
);

3.2 插入数据

通过 /update 接口插入数据:

curl "http://localhost:8080/update?sql=INSERT INTO users (name, age) VALUES ('Alice', 25)"
curl "http://localhost:8080/update?sql=INSERT INTO users (name, age) VALUES ('Bob', 30)"

3.3 查询数据

通过 /query 接口查询数据:

curl "http://localhost:8080/query?sql=SELECT * FROM users"

输出结果:

[{"id": 1, "name": "Alice", "age": 25},{"id": 2, "name": "Bob", "age": 30}
]

3.4 更新数据

通过 /update 接口更新数据:

curl "http://localhost:8080/update?sql=UPDATE users SET age = 26 WHERE name = 'Alice'"

3.5 删除数据

通过 /update 接口删除数据:

curl "http://localhost:8080/update?sql=DELETE FROM users WHERE name = 'Bob'"

4. 安全性注意事项

直接运行用户输入的 SQL 语句存在 SQL 注入风险。在实际生产环境中,应避免直接执行用户输入的 SQL。可以通过以下方式增强安全性:

  1. 使用参数化查询

    • 使用 JdbcTemplatequeryupdate 方法时,传入参数列表,而不是直接拼接 SQL。
    jdbcTemplate.query("SELECT * FROM users WHERE name = ?", new Object[]{"Alice"}, (rs, rowNum) -> {// 处理结果集
    });
    
  2. 限制 SQL 类型

    • 只允许执行 SELECT 查询,禁止执行 UPDATE、DELETE 等写操作。
  3. 权限控制

    • 确保数据库用户只有必要的权限(如只读权限)。

5. 总结

通过 Spring Boot 和 JDBC,我们可以轻松实现直接运行 SQL 的功能。JdbcTemplate 提供了强大的工具来简化 JDBC 操作,但需要注意安全性问题,避免 SQL 注入风险。如果需要更复杂的 ORM 功能,可以考虑使用 JPA 或 MyBatis。


http://www.ppmy.cn/server/168954.html

相关文章

Mysql-事务日志undo log

undo log 的作用 事务需要保证 原子性&#xff0c;也就是事务中的操作要么全部完成&#xff0c;要么什么也不做。但有时候事务执行到一半会出现一些情况&#xff0c;比如&#xff1a; 情况一&#xff1a;事务执行过程中可能遇到各种错误&#xff0c;比如服务器本身的错误 &am…

Java零基础入门笔记:(4)方法

前言 本笔记是学习狂神的java教程&#xff0c;建议配合视频&#xff0c;学习体验更佳。 【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili 第1-2章&#xff1a;Java零基础入门笔记&#xff1a;(1-2)入门&#xff08;简介、基础知识&#xff09;-CSDN博客 第3章…

DST Get Log Page相关NVMe Command

Admin Command 1. Device Self-Test&#xff08;DST&#xff09;设备自检命令 参考SQE结构&#xff1a; Namespace Test Action 在NSID字段中如果设置为00000000h表示不包括NS&#xff0c;DST操作只包括Controller&#xff1b; 00000001~FFFFFFFEh表示指定NSID&#xff0c;…

力扣-二叉树-700 二叉搜索树中的搜索

思路 根据左右大小关系&#xff0c;寻找节点 代码 class Solution { public:TreeNode* searchBST(TreeNode* root, int val) {if(root->val val){return root;}if(root->val < val){if(root->right) return searchBST(root->right, val);}else{if(root->…

无人机常见的开源飞控项目

开源飞控软件项目为无人机等无人载具的开发和应用提供了丰富的资源和灵活的解决方案&#xff0c;以下是一些常见的开源飞控软件项目&#xff1a; 1、PX4 简介&#xff1a;PX4 是一个高度模块化、可扩展的开源飞行控制平台&#xff0c;被广泛应用于各种类型的无人机&#xff0…

MoE硬件部署

文章目录 MoE硬件部署硬件需求**专家硬件映射&#xff1a;模块化计算单元****路由硬件加速&#xff1a;门控网络专用单元****内存与通信优化****能效控制策略****实例&#xff1a;假设部署Mixtral 8x7B到自研AI芯片** 资源分配硬件资源预分配&#xff08;编译时&#xff09;运行…

【愚公系列】《Python网络爬虫从入门到精通》008-正则表达式基础

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…

Qt笔记31-69

06QMainWindow 知识点1&#xff1a;QMainWindow概述 QMainWindow是一个为用户提供主窗口程序的类&#xff0c;包含一个菜单栏&#xff0c;多个工具栏&#xff0c;多个铆接部件&#xff0c;一个状态栏及一个中心部件 知识点2&#xff1a;菜单栏 菜单栏类QMenuBar 菜单类QMen…