【Spring Boot】JdbcTemplate数据连接模板 — 使用JdbcTemplate操作数据库

news2024/11/17 15:26:26

使用JdbcTemplate操作数据库

成功在Spring Boot项目中集成JdbcTemplate后,如何使用JdbcTemplate数据库连接模板操作数据库呢?接下来以示例演示JdbcTemplate实现学生信息的增、删、改、查等操作,让我们在实践中边学边用,更好地理解和吸收。

实现学生数据管理功能

步骤01 创建实体类。

根据之前创建的Student表结构创建对应的实体类Student,具体代码如下:

public class Student {
    private Long id;
    private String name;
    private int sex;
    private int age;

    public Student() {

    }
    public Student(String name ,  int sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
    //省略get、set方法
}

需要注意的是,实体类的数据类型要和数据库字段一一对应。

步骤02 定义Repository接口。

首先,创建StudentRepository接口并定义常用的增、删、改、查接口方法,示例代码如下:

public interface StudentRepository {
    int save(Student student);
    int update(Student student);
    int delete(Long id);
    Student findById(Long id);
}

在上面的示例中,在StudentRepository中定义了save()、update()、delete()和findById()方法。

然后,创建StudentRepositoryImpl类,继承StudentRepository接口,实现接口中的增、删、改、查等方法,示例代码如下:

@Repository
public class StudentRepositoryImpl implements StudentRepository {
    @Autowired
    private JdbcTemplate jdbcTemplate;
}

在上面的示例中,在StudentRepositoryImpl类上使用@Repository注解用于标注数据访问组件JdbcTemplate,同时在类中注入JdbcTemplate实例。

步骤03 实现增、删、改、查功能。

接下来逐个实现对应的增、删、改、查方法。

1)新增:在StudentRepositoryImpl类中实现StudentRepository接口中的save()方法。示例代码如下:

    @Override
    public int save(Student student) {
        return jdbcTemplate.update("INSERT INTO Student(name, sex, age) values(?,?,?)",
        student.getName(),student .getSex(),student.getAge());
    }

在JdbcTemplate中,除了查询有几个API之外,新增、删除与修改操作统一都调用update()方法来完成,传入SQL即可。Update()方法的返回值就是SQL执行受影响的行数。

2)删除:通过用户id删除用户信息,在StudentRepositoryImpl类中实现StudentRepository接口的update( )方法。示例代码如下:

    @Override
    public int delete(Long id) {
        return jdbcTemplate.update("DELETE FROM Student where id = ? ", id);
    }

看到这里读者可能会有疑问:怎么新增、删除、修改都调用update()方法,这与其他的框架不一样?严格来说,新增、删除、修改都属于数据写入,通过update()执行对应的SQL语句即可实现对数据库中数据的变更。

3)修改:修改和新增类似,在StudentRepositoryImpl类中实现StudentRepository接口的update()方法。示例代码如下:

    @Override
    public int update(Student student) {
        return jdbcTemplate.update("UPDATE Student SET name = ? , password = ? , age = ?, WHERE id=?", student.getName(), student.getSex(), student.getAge(), student.getId());
    }

4)查询:根据用户id查询用户信息,同样在StudentRepositoryImpl类中实现StudentRepository接口的findById()方法。示例代码如下:

    @Override
    public Student findById(long id) {
        return jdbcTemplate.queryForObject("SELECT * FROM Student WHERE id=?", new Object[] { id }, new BeanPropertyRowMapper<Student>(Student.class));
    }

在上面的示例中,JdbcTemplate执行查询相关的语句调用query()方法及queryForXXX()方法,查询对象调用queryForObject方法。JdbcTemplate支持将查询结果转换为实体对象,使用new BeanPropertyRowMapper(Student.class)对返回的数据进行封装,它通过名称匹配的方式自动将数据列映射到指定类的实体类中。

在执行查询操作时,需要有一个RowMapper将查询出来的列和实体类中的属性一一对应起来:如果列名和属性名是相同的,那么可以直接使用BeanPropertyRowMapper;如果列名和属性名不同,就需要开发者自己实现RowMapper接口,将数据列与实体类属性字段映射。

步骤04 验证测试。

接下来对封装好的StudentRepository进行测试,测试StudentRepository中的各个方法是否正确。创建StudentRepositoryTests类,将studentRepository注入测试类中。

@SpringBootTest
class StudentRepositoryImplTest {
    @Autowired
    private StudentRepository studentRepository;

    @Test
    void save() {
        Student student = new Student("example", 1, 30);
        studentRepository.save(student);
    }

    @Test
    void update() {
        Student student = new Student("example", 1, 18);
        student.setId(1L);
        studentRepository.update(student);
    }

    @Test
    void delete() {
        studentRepository.delete(1L);
    }

    @Test
    void findById() {
        Student student = studentRepository.findById(1L);
        System.out.println("student == " + student.toString());
    }
}

接下来,依次执行上面的单元测试方法,验证学生信息的增删改查功能是否正常,结果如图所示。
结果表明单元测试执行正常,说明StudentRepository中的方法执行成功,也可以查看数据库中的数据是否符合预期。

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

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

相关文章

Maven之Servlet 版本问题

maven-archetype-webapp 骨架的 Servlet 版本问题 通过 maven-archetype-webapp 骨架去创建 java web 项目时&#xff0c;自动生成的 web.xml 配置文件所使用的 Servlet 的版本比较低&#xff08;2.3&#xff09;&#xff0c;而在低版本的 Servlet 中 EL 表达式默认是关闭的。…

stack和queue的模拟实现

stack和queue的模拟实现 容器适配器什么是适配器STL标准库中stack和queue的底层结构deque的简单介绍deque的缺陷 stack模拟实现queue模拟实现priority_queuepriority_queue的使用priority_queue的模拟实现 容器适配器 什么是适配器 适配器是一种设计模式(设计模式是一套被反复…

深入解析:如何打造高效的直播视频美颜SDK

在当今数字化时代&#xff0c;视频直播已经成为人们交流、娱乐和信息传递的重要方式。然而&#xff0c;许多人在直播时都希望能够呈现出最佳的外观&#xff0c;这就需要高效的直播视频美颜技术。本文将深入解析如何打造高效的直播视频美颜SDK&#xff0c;以实现令人满意的视觉效…

磁盘格式化工具的详细指南!一文看懂五分钟搞定

什么是磁盘格式化工具&#xff1f; 磁盘格式化工具是一种软件&#xff0c;可让你擦除硬盘上的所有数据&#xff08;包括操作系统&#xff09;&#xff0c;并为新数据做好准备。格式化硬盘是提高电脑性能并消除你可能遇到的问题的好方法。 使用磁盘格式化工具有什么好处&am…

NineData x SelectDB 完成产品兼容互认证

近日&#xff0c;新一代实时数据仓库厂商 SelectDB 与云原生智能数据管理平台 NineData 完成产品兼容互认证。经过严格的联合测试&#xff0c;双方软件完全相互兼容、功能完善、整体运行稳定且性能表现优异。基于本次的合作&#xff0c;双方将进一步为数据管理与大数据分析业务…

Blazor前后端框架Known-V1.2.13

V1.2.13 Known是基于C#和Blazor开发的前后端分离快速开发框架&#xff0c;开箱即用&#xff0c;跨平台&#xff0c;一处代码&#xff0c;多处运行。 Gitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;https://github.com/known/Known 概述 基于C#和Blazo…

微信ipad协议

前言 微信协议就是基于微信IPad协议的智能控制系统&#xff0c;利用人工智能AI技术、云计算技术、虚拟技术、边缘计算技术、大数据技术&#xff0c; 打造出智能桌面系统RDS、 智能聊天系统ACS 、智能插 件系统PLUGIN 、云计算服务CCS 、 任务管理系统TM、设备管理服务DM、 应…

Webpack 配置多入口

1、配置多入口 entry index 和 other 为入口名称&#xff0c;即页面名称 2、配置出口 output filename 中的 [name] 对应入口的文件名 contentHash 会命中缓存&#xff0c;提高性能 3、配置插件 htmlWebpackPlugin&#xff0c;生成多页面 htmlWebpackPlugin 插件会生成页…

【大虾送书第六期】搞懂大模型的智能基因,RLHF系统设计关键问答

目录 ✨1、RLHF是什么&#xff1f; ✨2、RLHF适用于哪些任务&#xff1f; ✨3、RLHF和其他构建奖励模型的方法相比有何优劣&#xff1f; ✨4、什么样的人类反馈才是好的反馈 ✨5、RLHF算法有哪些类别&#xff0c;各有什么优缺点&#xff1f; ✨6、RLHF采用人类反馈会带来哪些局…

Swagger2 使用

大家好 , 我是苏麟 , 今天带来Swagger的使用 . 官方文档 : 招摇文档 (swagger.io) 访问地址 : 在路径后加上doc.html 例如: http://localhost:8000/doc.html Swagger 使用 依赖 <!--Swagger依赖 核心--><dependency><groupId>io.springfox</groupId&g…

关于ubuntu下面安装cuda不对应版本的pyTorch

最近换了台新的linux的ubuntu的服务器&#xff0c;发现其实际安装的cuda版本为11.4&#xff0c;但是pytorch官方给出的针对cuda 11.4并没有具体的pytorch的安装指令&#xff0c;于是采用不指定pytorch版本直接安装让其自动搜索得到即可 直接通过&#xff1a; pip3 install tor…

series的数据对齐功能

Series 是一种类似于 Numpy 中一维数组的对象&#xff0c;它由一组任意类型的数据以及一组与之相关的数据标签&#xff08;即索引&#xff09;组成。举个最简单的例子&#xff1a; 上面的代码将打印出如下内容&#xff1a; 左边的是数据的标签&#xff0c;默认从 0 开始依次递增…

快解析Linux搭建FTP服务器:轻松实现文件传输

在Linux操作系统中&#xff0c;搭建FTP服务器是一种常见且重要的操作。快解析提供了便捷的解决方案&#xff0c;帮助用户快速搭建FTP服务器&#xff0c;实现高效的文件传输和共享。本文将介绍Linux搭建FTP服务器的定义、作用以及其独特的优势&#xff0c;助您了解并利用这一强大…

用手势操控现实:OpenCV 音量控制与 AI 换脸技术解析

基于opencv的手势控制音量和ai换脸 HandTrackingModule.py import cv2 import mediapipe as mp import timeclass handDetector():def __init__(self, mode False, maxHands 2, model_complexity 1, detectionCon 0.5, trackCon 0.5):self.mode modeself.maxHands max…

理想的微生物组研究结果要注意高质量实验方案与取样细节

谷禾健康 最近有客户在拿到科研报告分析结果的时候问&#xff1a; “在同样的数据分析流程情况下&#xff0c;为什么我拿到的分析结果提取不出什么有价值的结果&#xff0c;而别人有着类似的项目课题&#xff0c;样本类型也相似&#xff0c;却可以拿到全面的差异分析结果&#…

GNU GRUB version 2.06 Minimal Bash-lke line editing is supported 问题修复

一、问题背景 博主喜欢折腾系统&#xff0c;电脑原来有一个windows系统&#xff0c;想整一个Linux双系统&#xff0c;结果开机时出现以下画面&#xff1a; GNU GRUB version 2.06 Minimal Bash-lke line editing is supported. TAB lists possible comand completions, Anywh…

SRM系统询价竞价管理:优化采购流程的全面解析

SRM系统的询价竞价管理模块是现代企业采购管理中的重要工具。通过该模块&#xff0c;企业可以实现供应商的询价、竞价和合同管理等关键环节的自动化和优化。 一、概述 SRM系统是一种用于管理和优化供应商关系的软件系统。它通过集成各个环节&#xff0c;包括供应商信息管理、询…

Spring Schedular 定时任务

大家好 , 我是苏麟 , 今天带来定时任务的实现 . Spring网站 : 入门 |计划任务 (spring.io) 什么是定时任务 通过时间表达式来进行调度和执行的一类任务被称为定时任务 定时任务实现 1.Spring Schedule (Spring boot 默认整合了) 2.Quartz(独立于Spring 存在的定时任务框架…

Windows 10编译SeetaFace6

Seeface 6 是中科视拓开源的人脸识别方案。 该项目使用C开发&#xff0c;在不同的系统中需要编译成对应的系统的动态链接库。 该项目在Windows 10 下使用VS2022编译成功 所需要的前提条件&#xff1a; cmake 下载地址 Download | CMake 将cmake的bin目录放到环境变量中 D:\…