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

2.2 利用MyBatis实现CRUD操作

一、准备工作

打开MyBatisDemo项目
在这里插入图片描述

二、查询表记录

1、在映射器配置文件里引入结果映射元素

在这里插入图片描述

在UserMapper.xml文件里创建结果映射元素
在这里插入图片描述

将UserMapper接口里抽象方法上的注解暂时注释掉
在这里插入图片描述

运行TestUserMapper测试类里的testFindAll()测试方法,查看结果
在这里插入图片描述

2、添加按姓名查询用户记录功能

(1)添加按姓名查询的映射语句

在UserMapper.xml里添加映射语句 - findByName
在这里插入图片描述

如果要实现按姓名模糊查询用户记录,那么语句要做如下修改
在这里插入图片描述

(2)在用户映射器接口里添加按姓名查询用户记录的方法

在UserMapper接口里添加findByName()方法
在这里插入图片描述

(3)添加按姓名查询用户记录的测试方法

在测试类TestUserMapper里添加测试方法testFindByName()
在这里插入图片描述

@Testpublic void testFindByName() {String name = "王";// 调用用户映射器的查询方法List<User> users = userMapper.findByName(name);// 输出全部用户信息(采用了列表的遍历算子与Lambda表达式users.forEach(user -> System.out.println(user));}

(4)测试按姓名查询用户记录

运行测试方法testFindByName(),查看结果

在这里插入图片描述
如果没有查询出姓“王”的用户记录,应该是编码的问题,修改MyBatis配置文件
在这里插入图片描述

三、插入表记录

1、添加插入映射语句

在UserMapper.xml文件里添加插入映射语句
在这里插入图片描述

 <!--插入用户记录--><insert id="insert" parameterType="User"useGeneratedKeys="true" keyProperty="id">INSERT INTO t_user(name, age, address)VALUES(#{name}, #{age}, #{address})</insert>

2、在用户映射器接口添加插入方法

在UserMapper接口里添加insert()方法,方法名insert与插入映射语句里的id值保持一致
在这里插入图片描述

3、在测试类里测试插入方法

在测试类TestUserMapper里添加测试方法testInsert()
在这里插入图片描述

@Test // 测试插入用户记录                                               
public void testInsert() {                                      // 创建用户对象                                                   User user = new User();                                     // 设置对象属性                                                   user.setName("王雨涵");                                        user.setAge(30);                                            user.setAddress("龙马潭区长桥路2号");                               // 插入用户记录                                                   int count = userMapper.insert(user);                        // 提交数据库操作                                                  sqlSession.commit();                                        // 判断插入记录是否成功                                               if (count > 0) {                                            System.out.println("恭喜,记录插入成功~");                       System.out.println("插入的新记录:" + user);                   } else {                                                    System.out.println("遗憾,记录插入失败~");                       }                                                           
}                                                               

4、运行插入记录测试方法

运行测试方法testInsert(),查看结果
在这里插入图片描述

5、运行按姓名查询测试方法

运行测试方法testFindByName(),查看结果
在这里插入图片描述

四、更新表记录

1、在用户映射器配置文件里添加更新映射语句

在UserMapper.xml里添加update映射语句

<update id="update" parameterType="User">UPDATE t_user SET name = #{name}, age = #{age},address = #{address} WHERE id = #{id};
</update>

在这里插入图片描述

2、在用户映射器接口添加更新方法

在UserMapper接口里添加update()方法
在这里插入图片描述

3、在测试类添加更新记录测试方法

在测试类TestUserMapper里添加测试方法testUpdate()
在这里插入图片描述

@Test // 测试更新用户记录                                    
public void testUpdate() {                           // 查找id为4的用户记录                                   User user = userMapper.findById(4);              // 输出更新前的记录                                      System.out.println("更新前的记录:" + user);            // 修改用户对象                                        user.setName("萌萌哒");                             user.setAge(25);                                 user.setAddress("北京朝阳区北苑路6号楼");                  // 更新用户记录                                        int count = userMapper.update(user);             // 判断更新是否成功                                      if (count > 0) {                                 // 提交数据库操作                                   sqlSession.commit();                         // 提示用户更新成功                                  System.out.println("恭喜,记录更新成功~");            System.out.println("更新后的记录:" + user);        } else {                                         // 提示用户更新失败                                  System.out.println("遗憾,记录更新失败~");            }                                                
}                                                    

4、运行更新用户记录测试方法

运行测试方法testUpdate(),查看结果
在这里插入图片描述

五、删除表记录

1、在用户映射器配置文件里添加删除映射语句

在UserMapper.xml文件里添加映射语句deleteById
在这里插入图片描述

<delete id="deleteById" parameterType="int">DELETE FROM t_user WHERE id = #{id};
</delete>

2、在用户映射器接口里添加删除方法

在UserMapper接口里添加deleteById()方法,方法名要与删除映射语句的id值保持一致
在这里插入图片描述

3、在测试类里添加删除记录测试方法

在测试类TestUserMapper里添加测试方法testDeleteById()
在这里插入图片描述

@Test // 测试按编号删除用户记录                                                 
public void testDeleteById() {                                       // 查找id为4的用户记录                                                   int id = 4;                                                      User user = userMapper.findById(id);                             // 输出待删除的记录                                                      System.out.println("待删记录:" + user);                              // 按编号删除用户记录                                                     int count = userMapper.deleteById(id);                           // 判断删除是否成功                                                      if (count > 0) {                                                 // 提交数据库操作                                                   sqlSession.commit();                                         // 提示用户删除成功                                                  System.out.println("恭喜,编号为[" + id + "]的记录删除成功~");            } else {                                                         // 提示用户删除失败                                                  System.out.println("遗憾,编号为[" + id + "]的记录删除失败~");            }                                                                
}                                                                    

4、运行按编号删除记录测试方法

运行测试方法testDeleteById(),查看结果
在这里插入图片描述

查看用户表记录
在这里插入图片描述

相关文章:

2.2 利用MyBatis实现CRUD操作

一、准备工作 打开MyBatisDemo项目 二、查询表记录 1、在映射器配置文件里引入结果映射元素 在UserMapper.xml文件里创建结果映射元素 将UserMapper接口里抽象方法上的注解暂时注释掉 运行TestUserMapper测试类里的testFindAll()测试方法&#xff0c;查看结果 2、添加…...

自动缩放Kubernetes上的Kinesis Data Streams应用程序

想要学习如何在Kubernetes上自动缩放您的Kinesis Data Streams消费者应用程序&#xff0c;以便节省成本并提高资源效率吗&#xff1f;本文提供了一个逐步指南&#xff0c;教您如何实现这一目标。 通过利用Kubernetes对Kinesis消费者应用程序进行自动缩放&#xff0c;您可以从其…...

介绍js各种事件

目录 一、点击事件 二、鼠标移动事件 三、键盘事件 四、滚轮事件 五、拖放事件 六、窗口大小改变事件 一、点击事件 点击事件是指当用户单击页面上的某个元素时触发的事件。这是最常见和基础的事件之一&#xff0c;也是Web应用程序中最常用的交互之一。 以下是如何使用…...

Python 将 CSV 分割成多个文件

文章目录 使用 Pandas 在 Python 中创建 CSV 文件在 Python 中将 CSV 文件拆分为多个文件根据行拆分 CSV 文件根据列拆分 CSV 文件 总结 在本文中&#xff0c;我们将学习如何在 Python 中将一个 CSV 文件拆分为多个文件。 我们将使用 Pandas 创建一个 CSV 文件并将其拆分为多个…...

S32K144开发板

目录 一&#xff0e;S32K144开发板概述 二&#xff0e;产品技术和功能规格 三&#xff0e;开发环境 1.S32K144的开发环境主流是这么三种&#xff1a; 2.开发板Demo工程 四&#xff0e;S32K144开发板实物图 五、汽车大灯硬件架构 一&#xff0e;S32K144开发板概述 S32K14…...

三波混频下的相位失配原理

原理推导 在四波混频情况下&#xff0c;实现零相位失配是一件很困难的事情。因为在四波混频中&#xff0c;相位调制和增益都依赖于相同的参数&#xff0c;即克尔非线性 γ \gamma γ。这个问题可以用嵌入在传输线上的辅助共振元件的复杂色散工程来部分解决。 但是在三波混频中…...

软考A计划-试题模拟含答案解析-卷一

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…...

Ubuntu下编译运行MicroPython Unix版本

文章目录 github拉取源码更新模块编译运行 github拉取源码 到Github(https://github.com/micropython/micropython)上下载源码 终端输入&#xff0c;如果提示识别不到gh命令&#xff0c;就sudo apt-get install gc安装一下。 再根据提示在终端里登录自己的github账号。 再次…...

实现用QCustomPlot封装的插件,放到绘图软件中可以点击和移动

首先,我们需要在绘图软件中创建一个插件,并将QCustomPlot控件添加到插件中。QCustomPlot是一个功能强大的绘图控件,可以轻松创建各种类型的图表,包括折线图、散点图、柱状图等等。 接下来,我们需要为QCustomPlot控件添加鼠标事件处理函数,以实现点击和移动的功能。QCust…...

【源码解析】Nacos配置热更新的实现原理

使用入门 使用RefreshScopeValue&#xff0c;实现动态刷新 RestController RefreshScope public class TestController {Value("${cls.name}")private String clsName;}使用ConfigurationProperties&#xff0c;通过Autowired注入使用 Data ConfigurationProperti…...

界面组件DevExpress ASP.NET Core v22.2 - UI组件升级

DevExpress ASP.NET Core Controls使用强大的混合方法&#xff0c;结合现代企业Web开发工具所期望的所有功能。该套件通过ASP.NET Razor标记和服务器端ASP.NET Core Web API的生产力和简便性&#xff0c;提供客户端JavaScript的性能和灵活性。ThemeBuilder工具和集成的Material…...

阿里系文生图(PAI+通义)

PAI-Diffusion模型来了&#xff01;阿里云机器学习团队带您徜徉中文艺术海洋 - 知乎作者&#xff1a;汪诚愚、段忠杰、朱祥茹、黄俊导读近年来&#xff0c;随着海量多模态数据在互联网的爆炸性增长和训练深度学习大模型的算力大幅提升&#xff0c;AI生成内容&#xff08;AI Gen…...

Netty概述及Hello word入门

目录 概述 Netty是什么 Netty的地位 Netty的优势 HelloWord入门程序 目标 pom依赖 服务器端 客户端 运行结果 入门把握理解 概述 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable hi…...

汇编寄存器之内存访问

1.内存中字的存储: 在CPU中用一个16位寄存器来存储一个字, 高8位存高字节,低8位存低字节 如AX寄存器存在一个字,那么AH存高字节,AL存低字节 在内存中存储字时是用两个连续的字节来存储字的, 这个字的低字节存在低单元,高字节存在高单元. 如下表示: 内存单元编号 单元中…...

C++进阶 —— lambda表达式(C++11新特性)

目录 一&#xff0c;模板函数sort 二&#xff0c;lambda表达式 一&#xff0c;模板函数sort 在C98中&#xff0c;如对一个数据集合中的元素进行排序&#xff0c;可使用模板函数sort&#xff0c;如元素为自定义类型&#xff0c;需定义排序时的比较规则&#xff1b;随着C的发展…...

数据结构04:串的存储结构与KMP算法

前言 参考用书&#xff1a;王道考研《2024年 数据结构考研复习指导》 参考用书配套视频&#xff1a;4.1_1_串的定义和基本操作_哔哩哔哩_bilibili 特别感谢&#xff1a; Google Bard老师[解释KMP&#xff0c;修改BUG]、Chat GPT老师[修改BUG]、BING老师[封面图]~ 当我请求BI…...

零基础快速搭建私人影音媒体平台

目录 1. 前言 2. Jellyfin服务网站搭建 2.1. Jellyfin下载和安装 2.2. Jellyfin网页测试 3.本地网页发布 3.1 cpolar的安装和注册 3.2 Cpolar云端设置 3.3 Cpolar本地设置 4.公网访问测试 5. 结语 转载自cpolar极点云的文章&#xff1a;零基础搭建私人影音媒体平台【…...

C++map和set

目录&#xff1a; 什么是关联式容器&#xff1f;键值对树形结构的关联式容器 set的概念multiset的使用pair和make_pair map的概念用“[]”实现统计水果的次数 multimap的使用 什么是关联式容器&#xff1f; 在初阶阶段&#xff0c;我们已经接触过STL中的部分容器&#xff0c;比…...

python接口测试之测试报告

在本文章中&#xff0c;主要使用jenkins和编写的自动化测试代码&#xff0c;来生成漂亮的测试报告&#xff0c;关于什么是CI这些我就不详细的介绍了&#xff0c;这里我们主要是实战为主。 首先搭建java的环境&#xff0c;这个这里不做介绍。搭建好java的环境后&#xff0c;在h…...

HGFormer:用于领域广义语义分割的层级式分组Transformer

文章目录 HGFormer: Hierarchical Grouping Transformer for Domain Generalized Semantic Segmentation摘要本文方法实验结果 HGFormer: Hierarchical Grouping Transformer for Domain Generalized Semantic Segmentation 摘要 目前的语义分割模型在独立同分布条件下取得了…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...