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()测试方法,查看结果 2、添加…...
自动缩放Kubernetes上的Kinesis Data Streams应用程序
想要学习如何在Kubernetes上自动缩放您的Kinesis Data Streams消费者应用程序,以便节省成本并提高资源效率吗?本文提供了一个逐步指南,教您如何实现这一目标。 通过利用Kubernetes对Kinesis消费者应用程序进行自动缩放,您可以从其…...
介绍js各种事件
目录 一、点击事件 二、鼠标移动事件 三、键盘事件 四、滚轮事件 五、拖放事件 六、窗口大小改变事件 一、点击事件 点击事件是指当用户单击页面上的某个元素时触发的事件。这是最常见和基础的事件之一,也是Web应用程序中最常用的交互之一。 以下是如何使用…...
Python 将 CSV 分割成多个文件
文章目录 使用 Pandas 在 Python 中创建 CSV 文件在 Python 中将 CSV 文件拆分为多个文件根据行拆分 CSV 文件根据列拆分 CSV 文件 总结 在本文中,我们将学习如何在 Python 中将一个 CSV 文件拆分为多个文件。 我们将使用 Pandas 创建一个 CSV 文件并将其拆分为多个…...
S32K144开发板
目录 一.S32K144开发板概述 二.产品技术和功能规格 三.开发环境 1.S32K144的开发环境主流是这么三种: 2.开发板Demo工程 四.S32K144开发板实物图 五、汽车大灯硬件架构 一.S32K144开发板概述 S32K14…...
三波混频下的相位失配原理
原理推导 在四波混频情况下,实现零相位失配是一件很困难的事情。因为在四波混频中,相位调制和增益都依赖于相同的参数,即克尔非线性 γ \gamma γ。这个问题可以用嵌入在传输线上的辅助共振元件的复杂色散工程来部分解决。 但是在三波混频中…...
软考A计划-试题模拟含答案解析-卷一
点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…...
Ubuntu下编译运行MicroPython Unix版本
文章目录 github拉取源码更新模块编译运行 github拉取源码 到Github(https://github.com/micropython/micropython)上下载源码 终端输入,如果提示识别不到gh命令,就sudo apt-get install gc安装一下。 再根据提示在终端里登录自己的github账号。 再次…...
实现用QCustomPlot封装的插件,放到绘图软件中可以点击和移动
首先,我们需要在绘图软件中创建一个插件,并将QCustomPlot控件添加到插件中。QCustomPlot是一个功能强大的绘图控件,可以轻松创建各种类型的图表,包括折线图、散点图、柱状图等等。 接下来,我们需要为QCustomPlot控件添加鼠标事件处理函数,以实现点击和移动的功能。QCust…...
【源码解析】Nacos配置热更新的实现原理
使用入门 使用RefreshScopeValue,实现动态刷新 RestController RefreshScope public class TestController {Value("${cls.name}")private String clsName;}使用ConfigurationProperties,通过Autowired注入使用 Data ConfigurationProperti…...
界面组件DevExpress ASP.NET Core v22.2 - UI组件升级
DevExpress ASP.NET Core Controls使用强大的混合方法,结合现代企业Web开发工具所期望的所有功能。该套件通过ASP.NET Razor标记和服务器端ASP.NET Core Web API的生产力和简便性,提供客户端JavaScript的性能和灵活性。ThemeBuilder工具和集成的Material…...
阿里系文生图(PAI+通义)
PAI-Diffusion模型来了!阿里云机器学习团队带您徜徉中文艺术海洋 - 知乎作者:汪诚愚、段忠杰、朱祥茹、黄俊导读近年来,随着海量多模态数据在互联网的爆炸性增长和训练深度学习大模型的算力大幅提升,AI生成内容(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新特性)
目录 一,模板函数sort 二,lambda表达式 一,模板函数sort 在C98中,如对一个数据集合中的元素进行排序,可使用模板函数sort,如元素为自定义类型,需定义排序时的比较规则;随着C的发展…...
数据结构04:串的存储结构与KMP算法
前言 参考用书:王道考研《2024年 数据结构考研复习指导》 参考用书配套视频:4.1_1_串的定义和基本操作_哔哩哔哩_bilibili 特别感谢: Google Bard老师[解释KMP,修改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极点云的文章:零基础搭建私人影音媒体平台【…...
C++map和set
目录: 什么是关联式容器?键值对树形结构的关联式容器 set的概念multiset的使用pair和make_pair map的概念用“[]”实现统计水果的次数 multimap的使用 什么是关联式容器? 在初阶阶段,我们已经接触过STL中的部分容器,比…...
python接口测试之测试报告
在本文章中,主要使用jenkins和编写的自动化测试代码,来生成漂亮的测试报告,关于什么是CI这些我就不详细的介绍了,这里我们主要是实战为主。 首先搭建java的环境,这个这里不做介绍。搭建好java的环境后,在h…...
HGFormer:用于领域广义语义分割的层级式分组Transformer
文章目录 HGFormer: Hierarchical Grouping Transformer for Domain Generalized Semantic Segmentation摘要本文方法实验结果 HGFormer: Hierarchical Grouping Transformer for Domain Generalized Semantic Segmentation 摘要 目前的语义分割模型在独立同分布条件下取得了…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
