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

MVN--07

一、MyBatis 参数封装规则

MyBatis 会根据接口方法的参数类型,自动进行不同的封装处理,核心由ParamNameResolver类实现。

1. 单个参数的封装规则

表格

参数类型封装规则XML 中取值方式
POJO 实体类直接使用,无需额外处理#{属性名}(属性名与占位符名称一致)
Map 集合直接使用,无需额外处理#{键名}(键名与占位符名称一致)
Collection 集合封装为 Map,默认 key 为collectionarg0#{collection}/#{arg0},建议用@Param自定义 key
List 集合封装为 Map,默认 key 为collectionlistarg0#{collection}/#{list}/#{arg0},建议用@Param自定义 key
Array 数组封装为 Map,默认 key 为arrayarg0#{array}/#{arg0},建议用@Param自定义 key
其他类型(String/int 等)直接使用,无需封装#{任意名称}(名称不影响取值)

2. 多个参数的封装规则

  • 默认封装:MyBatis 会自动将多个参数封装为 Map,默认 key 为:
    • arg0arg1...(按参数顺序)
    • param1param2...(按参数顺序,MyBatis 3.4.2+ 支持)
  • @Param 注解优化:使用@Param("自定义key")注解,可替换默认的arg键名,大幅提升代码可读性。

    java

    运行

    // 接口方法 User select(@Param("username") String username, @Param("password") String password); // XML 映射文件 <select id="select" resultType="user"> select * from tb_user where username = #{username} and password = #{password}; </select>

3. 核心建议

无论单个集合 / 数组参数,还是多个普通参数,都建议统一使用@Param注解自定义 key,避免依赖默认键名,提升代码可维护性和可读性。


二、MyBatis 注解开发

MyBatis 支持纯注解开发,无需编写 XML 映射文件,适合简单 CRUD 场景。

1. 核心注解

表格

操作类型对应注解示例
查询@Select@Select("select * from tb_user where id = #{id}")
添加@Insert@Insert("insert into tb_user values(#{id},#{username},#{password})")
修改@Update@Update("update tb_user set username=#{username} where id=#{id}")
删除@Delete@Delete("delete from tb_user where id=#{id}")

2. 完整示例

java

运行

public interface UserMapper { // 根据ID查询用户 @Select("select * from tb_user where id = #{id}") public User selectById(int id); // 新增用户 @Insert("insert into tb_user(username, password) values(#{username}, #{password})") public int add(User user); // 修改用户 @Update("update tb_user set username=#{username}, password=#{password} where id=#{id}") public int update(User user); // 删除用户 @Delete("delete from tb_user where id=#{id}") public int deleteById(int id); }

3. 注解 vs XML 开发对比

表格

开发方式适用场景优缺点
注解开发简单 CRUD、单表操作✅ 代码简洁、开发效率高;❌ 复杂 SQL、动态 SQL 维护困难
XML 开发复杂 SQL、动态 SQL、多表关联✅ 结构清晰、可维护性强;❌ 开发流程稍繁琐

最佳实践:简单操作用注解,复杂操作用 XML,两种方式可自由切换,无需统一。

http://www.jsqmd.com/news/608740/

相关文章:

  • 金融系统的测试特殊性:安全、合规与性能
  • CyberpunkSaveEditor:革新性存档自定义工具完全指南 - 全方位掌控游戏体验
  • 自学渗透测试第12天(渗透测试流程与DVWA部署)
  • 5个实际场景,用Pix2Text高效解决图像转文本难题
  • IOFILE结构体的介绍与House of orange敦
  • FPGA千兆网卡设计复盘:SGMII接口调试中的三个‘坑’与解决方案
  • Windows电脑突然变卡?手把手教你排查Artemis僵尸网络(附注册表修复脚本)
  • 基于出行链的电动汽车节点充电负荷预测MATLAB程序详解(适用于住宅区等非商业区域)
  • 三星手机充电器外壳注塑模设计【说明书+CAD图纸+UG三维】
  • 工字钢规格选型与工程采购指南:云南钢佑钢材专业解析 - 深度智识库
  • 告别OpenAI API调用:用Ollama+Qwen2本地模型为你的RAG系统生成测试数据
  • 大模型训练避坑指南:如何用FSDP2在单机多卡上高效训练百亿参数模型
  • 大模型面试连环炮解析:小白程序员必备,收藏学习拿高薪!
  • comsol BIC本征态计算,支持comsol直接出图。 2019PRL。 此为通用算法
  • nuScenes 全景分割:Panoptic nuScenes 完整实现指南
  • 从代码跑起来看大模型:小白必看生成式AI实战(收藏学习)
  • OpenVINS视觉跟踪技术深度解析:从KLT到特征描述子
  • RK3588 NPU性能压榨指南:通过RKNN模型量化(INT8/FP16)让你的推理速度翻倍
  • 5分钟上手FigmaCN:让设计效率提升40%的开源中文插件
  • 2026年搅拌摩擦焊设备梯队名录:三大源头厂家核心能力对比 - 真知灼见33
  • 3步构建Python抢票系统:从原理到实战的全流程指南
  • 怎么感觉最近裁员更严重了。。。
  • 从期中考试到实战:拆解人工智能五大核心算法
  • 函数柯里化 | 原理、实现与应用
  • python面向对象-抽象类
  • 2026年打包箱房活动房厂家推荐:云南合弘晟装配式建筑有限公司,民宿箱式房酒店/轻钢结构厂房/集装箱 - 深度智识库
  • 2026年,软件测试员必须掌握的5项“生存技能”
  • 收藏!面试官亲授|应用算法岗(含大模型方向)面试流程全解析,小白也能轻松拿捏
  • R与RStudio版本升级全攻略:从环境配置到无缝迁移
  • 告别手搓算子!用昇腾Catlass模板库,5分钟搞定Transformer小批量矩阵乘法优化