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

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


增删改查操作


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


( 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 的方式?


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


数据库连接池使用


常见的数据库连接池:

  • C3P0
  • DBCP
  • Druid
  • Hikari

目前比较流行的是Hikari、Druid。


Hikari


SpringBoot默认使用的数据库连接池。

image-20250404221409450

Hikari是日语"光"的意思(ひかり),Hikari也是以追求性能极致为目标。


Druid


如果我们想把默认的数据库连接池切换为Druid数据库连接池,只需要引入相关依赖即可。

<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.21</version>
</dependency>

如果SpringBoot版本为2.X,使用druid-spring-boot-starter依赖。

<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.17</version>
</dependency>

运行结果:

image-20250403091023864


参考官方地址:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

  • Druid 连接池是阿里巴巴开源的数据库连接池项目。
  • 功能强大,性能优秀,是Java语言最好的数据库连接池之一。
  • 学习文档:https://github.com/alibaba/druid/wiki/%E9%A6%96%E9%A1%B5

二者对比,参考:Hikaricp和Druid对比_数据库_晚风暖-华为云开发者联盟。


MySQL 开发企业规范


  1. 表名、字段名使用小写字母或数字,单词之间以下划线分割。尽量避免出现数字开头或者两个下划线中间只出现数字。数据库字段名的修改代价很大,所以字段名称需要慎重考虑。
  • MySQL在Windows下不区分大小写,但在Linux下默认是区分大小写。

  • 因此,数据库名、表名、字段名都不允许出现任何大写字母,避免节外生枝。

    • 正例:aliyun_adminrdc_configlevel3_name
    • 反例:AliyunAdminrdcConfiglevel_3_name

  1. 表必备三字段:idcreate_timeupdate_time
  • id必为主键,类型为bigint unsigned,单表时自增,步长为1。
  • create_timeupdate_time的类型均为datetime类型,create_time表示创建时间,update_time表示更新时间。
  • 有同等含义的字段即可,字段名不做强制要求。

  1. 在表查询中,避免使用*作为查询的字段列表,标明需要哪些字段;
  1. 增加查询分析器解析成本
  2. 增减字段容易与resultMap配置不一致
  3. 无用字段增加网络消耗,尤其是text类型的字段

在这里插入图片描述

在这里插入图片描述


http://www.mrgr.cn/news/97035.html

相关文章:

  • 图解AUTOSAR_LINInterface
  • 认识 Promise
  • 算法题(114):矩阵距离
  • 【动态规划】线性dp——LIS和LCS
  • LeeCode 5. 最长回文子串
  • 计算机视觉算法实战——基于YOLOv8的行人流量统计系统
  • ARM------硬件程序开发
  • vue3+ts+element-plus 开发一个页面模块的详细过程
  • 栈容器的应用
  • SpringBoot项目Sa-token框架整合JWT
  • 【Linux网络与网络编程】03.UDP Socket编程
  • 虚拟电商-话费充值业务(六)话费充值业务回调补偿
  • 机器学习学习笔记
  • SpringBoot+vue前后端分离整合sa-token(无cookie登录态 详细的登录流程)
  • TRDI 公司的RiverPro 和 RioPro ADCP 用户指南
  • 生成对抗网络(GAN)详解(代码实现)
  • 【C++】Cplusplus进阶
  • 2025徘徊与坚守:在传统与变革间寻找自己
  • 基于卷积神经网络CNN实现电力负荷多变量时序预测(PyTorch版)
  • RabbitMQ高级特性1