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

SQL中的占位符、@Param注解和方法参数

代码中出现的多个 username 和 password 代表不同层面的变量,具体含义如下(按执行顺序):

### 1. @Param("username") String username
- 位置 :方法参数前的注解
- 作用 :
- @Param("username") :给参数 命名 ,告诉MyBatis“这个参数对应SQL中的 #{username} ”
- String username :方法的 形参变量 ,接收外部传入的用户名(比如用户登录时输入的值)
### 2. #{username}(SQL语句中)
- 位置 :SQL语句的条件部分
- 作用 :MyBatis的 参数占位符 ,会被替换成 @Param("username") 注解的参数值
- 安全机制 :自动防止SQL注入(比直接拼接字符串安全)
### 3. 数据库表字段 username
- 位置 : tb_user 表中的字段名
- 作用 :存储用户账号的 数据库列名 ,与Java代码无关,是数据库设计的一部分

完整执行流程

用户输入 → 调用select方法 → @Param注解映射 → SQL参数替换 → 数据库查询↓           ↓               ↓               ↓               ↓
"张三" → String username → @Param("username") → #{username} → WHERE username = '张三'

### 为什么需要这么多同名变量?
- 分层设计 :Java代码(方法参数)→ ORM框架(MyBatis注解)→ 数据库(表字段)的 解耦
- 可读性 :保持名称一致让代码更易理解(看到 username 就知道是用户名)
- 框架要求 :MyBatis需要通过 @Param 建立Java参数与SQL参数的映射关系
### 一句话总结
方法参数→注解命名→SQL占位符 ,三者通过名称关联,最终目的是 安全地把用户输入的值传递给数据库查询 。 

 

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

相关文章:

  • vue递归树形结构删除不符合数据 生成一个新数组
  • HTTPS如何保障安全?详解证书体系与加密通信流程
  • AI 在金融:重塑金融服务的智能革命
  • 《小白学习产品经理》第十章:方法论之MVP
  • Windows 下配置 GPU 用于深度学习(PyTorch)的完整流程
  • 让复杂 AI 应用构建就像搭积木:Spring AI Alibaba Graph 使用指南与源码解读
  • 测试学习之——Pytest Day5
  • 关闭 Chrome 浏览器后,自动删除浏览历史记录
  • 3.7 综合挑战项目
  • C语言(长期更新)第5讲:数组练习(三)
  • 跑步有氧训练
  • MegaTTS3 使用
  • Elasticsearch 的聚合(Aggregations)操作详解
  • Mysql窗口函数
  • 数据库垂直拆分和水平拆分
  • 面经 - 车载多媒体系统
  • 【已解决】YOLO11模型转wts时报错:PytorchStreamReader failed reading zip archive
  • PyTorch数据选取与索引详解:从入门到高效实践
  • es 和 lucene 的区别
  • 【REACT18.x】CRA+TS+ANTD5.X实现useImperativeHandle让父组件修改子组件的数据
  • R study notes[1]
  • linux入门 相关linux系统操作命令(二)--文件管理系统 ubuntu22.04
  • 二分查找-153-寻找旋转排序数组中的最小值-力扣(LeetCode)
  • unordered_map和unordered_set特性以及解决哈希冲突
  • Gemini拿下IMO2025金牌的提示词解析
  • Redis Lua脚本语法详解
  • Redis ①⑦-分布式锁
  • 跨模态理解的基石:非文本内容向量化方法全景解析
  • Lua协同程序(coroutine)
  • leetcode100.相同的树(递归练习题)