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

【MyBatis】深入解析 MyBatis XML 开发:增删改查操作和方法命名规范、@Param 重命名参数、XML 返回自增主键方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


增删改查操作


接下来,我们来实现一下用户的增加、删除和修改的操作。


( Insert )


UserInfoMapper接口:

image-20250403205321684

我们写好UserInfoMapper接口后,自动生成 XML 代码;


UserInfoMapper.xml实现:

image-20250403205607348


增删改查方法命名规范


如果我们在 mapper 接口的方法名没有 insert,select,update,delete 这四个单词,自动生成 XML 代码时,会出现下列提示,来确认我们的方法属于增删改查中的哪一个类型:

image-20250403205758759


上图遇到的问题其实涉及到了 Mybatis 各层方法的命名规范问题:

image-20250403210329949


接下来,我们回到正题,在 XML 文件对应 insertUser() 接口的位置写出如下 SQL:

insert into user_info(username, `password`, age) 
values(#{username}, #{password}, #{age})

image-20250403211112361

此时,这条 insert 的 SQL 也涉及到一个传参的问题;

根据上面的 SQL ,我们是把参数 username,password,age 放到对象 userInfo 中了,在 XML 中就要从这个传过去的对象中,获取需要的属性;

  • MyBatis 是先有 XML 开发方式,才有注解开发方式,注解的设计也参考了 XML;
  • 如果我们的参数使用对象,那么 Mybatis 会自动生成按对象属性 username , age , password 这样的参数,而不需要我们通过 userInfo.age 这样的方法来获取属性参数;

image-20250403211637831

  • 我们只需要区分数据库字段,和被 #{}包含着的 java 属性即可

接下来,我们生成测试类方法,并且写出对应逻辑,执行程序,观察日志结果:

image-20250403212213895


刷新数据库的 user_info 表,可以发现,我们已经成功插入数据:

image-20250403212308525


@Param 设置参数名称


如果使用@Param设置参数名称的话,使用方法和注解类似,但是 java 在#{} 属性需要通过从命名对象调用获得:


  • UserInfoMapper接口:

image-20250403212733784


  • UserInfoMapper.xml实现:

image-20250403212753499


生成并执行测试类方法:

image-20250403213008855


观察错误日志,发现程序成功运行:

image-20250403213147637


返回自增 id


接口定义不变,Mapper.xml实现设置useGeneratedKeyskeyProperty属性。

image-20250403220708724


观察打印日志:

image-20250403220939572


我们再来查看表:

image-20250403221009797

通过上述的方法,我们可以拿到数字最大的自增主键;


我们可以顺便回忆以下,使用 @Option 注解是怎么拿到自增 id 的:

image-20250403220852179


( Update )


写出 UserInfoMapper接口,并且自动生成 UserInfoMapper.xml 文件,写出对应的 SQL

image-20250403223853169


生成测试类方法并执行:

image-20250403223958333


查看表:

image-20250403224054431


( Delete )


UserInfoMapper接口 和 UserInfoMapper.xml实现:

image-20250403224530490


image-20250403224638898


我们再查看表,发现 Id= 15 的记录已经被删除了:

image-20250403224715504


( Select )


【MyBatis】深入解析 MyBatis:关于注解和 XML 的 MyBatis 开发方案下字段名不一致的的查询映射解决方案-CSDN博客


开发中使用注解还是 XML 的方式?


关于开发中使用哪种模式这个问题,没有明确答案。仁者见仁智者见智,并没有统一的标准,更多是取决于你的团队或者项目经理、项目负责人。


在这里插入图片描述

在这里插入图片描述

http://www.dtcms.com/a/109093.html

相关文章:

  • ES中经纬度查询geo_point
  • 图像处理之Homography matrix(单应性矩阵)
  • 2025年4月3日(模数转换器)
  • 【Centos】centos7内核升级-亲测有效
  • 【动态规划】P8638 [蓝桥杯 2016 省 A] 密码脱落
  • 树莓派 5 换清华源
  • 【C语言】C语言文件操作指南
  • 质检LIMS系统在垃圾处理厂的应用 垃圾处理质检的三重挑战与LIMS破局之道
  • 管理系统如何帮助你节省时间和成本?
  • 移动端六大语言速记:第7部分 - 文件与输入输出(I/O)
  • 【网络流 图论建模 最大权闭合子图】 [六省联考 2017] 寿司餐厅
  • 二十八、城市建成区提取——领域分析法
  • vulnhub-DC-2通关攻略
  • 从零构建大语言模型全栈开发指南:第五部分:行业应用与前沿探索-5.2.1模型偏见与安全对齐(Red Teaming实践)
  • 新能源汽车测试中的信号调理模块:从原理到实战应用
  • python--文件夹的压缩和解压缩(zipfile/pyzipper)
  • Day15——路由
  • 飞浆PaddlePaddle 猫狗数据大战
  • Pyinstaller 打包flask_socketio为exe程序后出现:ValueError: Invalid async_mode specified
  • 学习threejs,使用Texture纹理贴图,测试repeat重复纹理贴图
  • ngx_regex_init
  • C语言基础要素(019):输出ASCII码表
  • 李沐 X 动手学深度学习--第九章 现代循环神经网络
  • webstorm初始化配置项目
  • MySQL学习集--DDL
  • Python 数据科学实战指南:从零开始构建高效分析流程
  • 单片机学习之SPI
  • JVM深入原理(七)(一):运行时数据区
  • 图形界面设计理念
  • 使用 PyTorch 的 `optim.lr_scheduler.CosineAnnealingLR` 学习率调度器