【Java 进阶篇】使用 JDBCTemplate 执行 DQL 语句详解

在这里插入图片描述

在前面的文章中,我们已经学习了如何使用 Spring 的 JDBCTemplate 执行 DML(Data Manipulation Language)操作,包括插入、更新和删除操作。现在,让我们来深入了解如何使用 JDBCTemplate 执行 DQL(Data Query Language)语句,从数据库中检索数据。

什么是 DQL?

DQL 是 SQL 的一部分,它用于从数据库中检索(查询)数据而不对数据进行修改。主要的 SQL DQL 语句包括 SELECTFROMWHEREGROUP BYHAVINGORDER BY 等,用于指定要检索的数据、数据的来源、筛选条件、分组方式和排序方式等。

使用 JDBCTemplate 执行 DQL 语句

要使用 JDBCTemplate 执行 DQL 语句,我们需要创建一个 JdbcTemplate 对象并配置数据源。以下是一些步骤:

步骤 1:配置数据源

首先,我们需要配置一个数据源,以便 JDBCTemplate 能够获取数据库连接。Spring 支持多种数据源,例如 Apache Commons DBCP、HikariCP 和 C3P0 等。这里我们以 HikariCP 数据源为例进行配置。

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;import javax.sql.DataSource;public class DataSourceConfig {public DataSource dataSource() {HikariConfig config = new HikariConfig();config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");config.setUsername("root");config.setPassword("password");return new HikariDataSource(config);}
}

步骤 2:创建 JdbcTemplate

接下来,我们需要创建一个 JdbcTemplate 对象,并将数据源传递给它。

import org.springframework.jdbc.core.JdbcTemplate;public class JdbcTemplateConfig {private DataSource dataSource;public JdbcTemplateConfig(DataSource dataSource) {this.dataSource = dataSource;}public JdbcTemplate jdbcTemplate() {return new JdbcTemplate(dataSource);}
}

步骤 3:执行查询语句

现在,我们可以使用 JDBCTemplate 执行 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 class EmployeeDao {private JdbcTemplate jdbcTemplate;public EmployeeDao(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public List<Employee> getAllEmployees() {String sql = "SELECT * FROM employees";return jdbcTemplate.query(sql, new EmployeeRowMapper());}
}class EmployeeRowMapper implements RowMapper<Employee> {@Overridepublic Employee mapRow(ResultSet rs, int rowNum) throws SQLException {Employee employee = new Employee();employee.setId(rs.getInt("id"));employee.setFirstName(rs.getString("first_name"));employee.setLastName(rs.getString("last_name"));employee.setEmail(rs.getString("email"));return employee;}
}

在上述示例中,我们创建了一个 EmployeeDao 类,其中的 getAllEmployees 方法执行了一个 SQL 查询语句,使用 query 方法将查询结果映射到 Employee 对象列表中。

示例代码

下面是一个完整的示例代码,演示了如何使用 JDBCTemplate 执行 DQL 查询语句:

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;public class Main {public static void main(String[] args) {// 步骤 1:配置数据源DataSource dataSource = configureDataSource();// 步骤 2:创建 JdbcTemplateJdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);// 步骤 3:执行查询EmployeeDao employeeDao = new EmployeeDao(jdbcTemplate);List<Employee> employees = employeeDao.getAllEmployees();// 打印查询结果for (Employee employee : employees) {System.out.println("Employee ID: " + employee.getId());System.out.println("First Name: " + employee.getFirstName());System.out.println("Last Name: " + employee.getLastName());System.out.println("Email: " + employee.getEmail());System.out.println();}}private static DataSource configureDataSource() {HikariConfig config = new HikariConfig();config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");config.setUsername("root");config.setPassword("password");return new HikariDataSource(config);}
}class Employee {private int id;private String firstName;private String lastName;private String email;// 省略 getter 和 setter 方法
}class EmployeeDao {private JdbcTemplate jdbcTemplate;public EmployeeDao(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public List<Employee> getAllEmployees() {String sql = "SELECT * FROM employees";return jdbcTemplate.query(sql, new EmployeeRowMapper());}
}class EmployeeRowMapper implements RowMapper<Employee> {@Overridepublic Employee mapRow(ResultSet rs, int rowNum) throws SQLException {Employee employee = new Employee();employee.setId(rs.getInt("id"));employee.setFirstName(rs.getString("first_name"));employee.setLastName(rs.getString("last_name"));employee.setEmail(rs.getString("email"));return employee;}
}

总结

在本文中,我们学习了如何使用 Spring 的 JDBCTemplate 执行 DQL 查询语句。首先,我们配置了数据源,然后创建了 JdbcTemplate 对象,最后执行了一个简单的查询操作,并将查询结果映射到 Java 对象中。通过这种方式,我们可以方便地与数据库交互,检索所需的数据。

希望本文能帮助你更好地理解如何使用 JDBCTemplate 执行 DQL 查询操作,并在实际项目中应用这些知识。

如果你想要深入学习 Spring JDBC,还可以研究更高级的主题,例如分页查询、存储过程调用和高级映射等。祝你在使用 Spring JDBC 进行数据库操作时取得成功!

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/96001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Youtube视频下载工具分享-油管视频,音乐,字幕下载方法汇总

YouTube视频下载方法简介 互联网上存在很多 YouTube 下载工具&#xff0c;但我们经常会发现自己收藏的工具没过多久就会失效&#xff0c;我们为大家整理的这几种方法&#xff0c;是存在时间较久并且亲测可用的。后续如果这些工具失效或者有更好的工具&#xff0c;我们也会分享…

算法通过村第十二关-字符串|白银笔记|经典面试题

文章目录 前言1. 反转问题1.1 反转字符串1.2 k个一组反转1.3 仅仅反转字母1.3.1 采用栈实现操作1.3.2 采用双指针实现操作 1.4 反转字符串里面的单词1.4.1 使用语言提供的方法来解决(内置API)1.4.2 如何优雅自己实现上述功能 2. 验证回文串3. 字符串中的第一个唯一字符4. 判断是…

GitHub爬虫项目详解

前言 闲来无事浏览GitHub的时候&#xff0c;看到一个仓库&#xff0c;里边列举了Java的优秀开源项目列表&#xff0c;包括说明、仓库地址等&#xff0c;还是很具有学习意义的。但是大家也知道&#xff0c;国内访问GitHub的时候&#xff0c;经常存在访问超时的问题&#xff0c;…

鸡群优化(CSO)算法(含MATLAB代码)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

《Secure Analytics-Federated Learning and Secure Aggregation》论文阅读

背景 机器学习模型对数据的分析具有很大的优势&#xff0c;很多敏感数据分布在用户各自的终端。若大规模收集用户的敏感数据具有泄露的风险。 对于安全分析的一般背景就是认为有n方有敏感数据&#xff0c;并且不愿意分享他们的数据&#xff0c;但可以分享聚合计算后的结果。 联…

【算法练习Day13】二叉树的层序遍历翻转二叉树对称二叉树

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 二叉树的层序遍历翻转二叉树…

【二】spring boot-设计思想

spring boot-设计思想 简介&#xff1a;现在越来越多的人开始分析spring boot源码&#xff0c;拿到项目之后就有点无从下手了&#xff0c;这里介绍一下springboot源码的项目结构 一、项目结构 从上图可以看到&#xff0c;源码分为两个模块&#xff1a; spring-boot-project&a…

00|漫展人物备注

1&#xff1a;紫色女孩 2 浪漫&#xff08;散兵&#xff09; 3. 雪 工具 1、画笔工具&#xff1a; 磨皮核心工具 2、仿制图章&#xff1a; 去掉不想要的部分。 按住Alt&#xff0c;左键点击想复制的地方&#xff0c;按住左键&#xff0c;点击想遮盖的地方 3、液化工具 选…

ipa文件怎么把应用上架到苹果ios系统下载的App Store商城

注册为苹果开发者&#xff1a;首先&#xff0c;您需要注册为苹果开发者。前往苹果开发者网站&#xff08;https://developer.apple.com/&#xff09;&#xff0c;点击"Enroll"按钮&#xff0c;并按照相关步骤注册和付费&#xff08;开发者账号需要年度费用&#xff0…

Java 创建线程的方法

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开兴好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

SpringCloud Alibaba - Seata 四种分布式事务解决方案(TCC、Saga)+ 实践部署(下)

目录 一、Seata 分布式解决方案 1.1、TCC 模式 1.1.1、TCC 模式理论 对比 TCC 和 AT 模式的一致性和隔离性 TC 的工作模型 1.2.2、TCC 模式优缺点 1.2.3、TCC 模式注意事项&#xff1a;空回滚 1.2.4、TCC 模式注意事项&#xff1a;业务悬挂 1.2.5、实现 TCC 模式 案例…

(六)正点原子STM32MP135移植——内核移植

目录 一、概述 二、编译官方代码 三、移植 四、编译 一、概述 前面已经移植好了TF-A、optee、u-boot&#xff0c;在u-boot能正常跑起来的情况下&#xff0c;现在来移植内核。 二、编译官方代码 进入kernel目录 2.1 解压源码、打补丁 /* 解压源码 */ tar xf linux-6.1.28.…

3_使用传统CNN网络训练图像分类模型

使用传统CNN网络训练图像分类模型 1. MNIST 首先,定义一下超参数等 import torch# dataset input_shape = 28 num_classes = 10# hyper batch_size = 64 num_epochs = 5 learning_rate = 1e-3# gpu device = torch.device(cuda

RAID0_RAID1_RAID10_RAID5各需几块盘才可组建

RAID 0 RAID 0即Data Stripping&#xff08;数据分条技术&#xff09;。整个逻辑盘的数据是被分条&#xff08;stripped&#xff09;分布在多个物理磁盘上&#xff0c;可以并行读/写&#xff0c;提供最快的速度&#xff0c;但没有冗余能力。要求至少两个磁盘。我们通过RAID 0可…

【Go语言实战】(25) 分布式算法 MapReduce

MapReduce 写在前面 身为大数据专业的学生&#xff0c;其实大学我也多多少少接触过mapreduce&#xff0c;但是当时觉得这玩意太老了&#xff0c;觉得这和php一样会被时代淘汰。只能说当时确实太年轻了&#xff0c;没有好好珍惜那时候的学习资源… 现在回过头来看mapreduce&a…

使用UiPath和AA构建的解决方案 2. HelpDesk生成Ticket

让我们开始我们的第一个项目——使用UiPath实现简单的HelpDesk自动化。 HelpDesk代理从各种渠道获得输入,包括电话、电子邮件和电子表格,以创建和更新支持Ticket。支持Ticket是您通过致电HelpDesk代理以解决问题而提出的请求;例如,你的笔记本电脑不工作,或者你有互联网问题…

想做好接口测试,先把这些概念搞清楚了

接口一般来说有两种&#xff0c;一种是程序内部的接口&#xff0c;一种是系统对外的接口。 系统对外的接口 比如你要从别的网站或服务器上获取资源或信息&#xff0c;别人肯定不会把数据库共享给你&#xff0c;他只能给你提供一个他们写好的方法来获取数据&#xff0c;你引用…

【BBC新闻文章分类】使用 TF 2.0和 LSTM 的文本分类

一、说明 NLP上的许多创新是如何将上下文添加到词向量中。常见的方法之一是使用递归神经网络

UDS诊断:87服务-LinkControl(链接控制服务)

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍诊断和通讯管理功能单元下的87服务LinkControl,该服务可以用来改变网络传输速率,确切的说是客户端请求控制通信波特率。 文章目录 诊断协议那些事儿一、87服务-LinkControl主要应用场景二、请求格式子功能参数说明l…

数据结构之带头双向循环链表

目录 链表的分类 带头双向循环链表的实现 带头双向循环链表的结构 带头双向循环链表的结构示意图 空链表结构示意图 单结点链表结构示意图 多结点链表结构示意图 链表创建结点 双向链表初始化 销毁双向链表 打印双向链表 双向链表尾插 尾插函数测试 双向链表头插 …