Mybatis中@Param的用法和作用详解

发布时间 - 2026-01-11 03:28:14    点击率:

用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中

我们先来看Mapper接口中的@Select方法

package Mapper; 
public interface Mapper { 
@Select("select s_id id,s_name name,class_id classid from student where s_name= #{aaaa} and class_id = #{bbbb}") 
  public Student select(@Param("aaaa") String name,@Param("bbbb")int class_id); 
@Delete...... 
@Insert...... 
}   

这里解释一下

1.@Select(....)注解的作用就是告诉mybatis框架,执行括号内的sql语句

2.s_id id,s_name name,class_id classid  格式是 字段名+属性名,例如s_id是数据库中的字段名,id是类中的属性名

    这段代码的作用就是实现数据库字段名和实体类属性的一一映射,不然数据库不知道如何匹配

3.where  s_name= #{aaaa} and class_id = #{bbbb} 表示sql语句要接受2个参数,一个参数名是aaaa,一个参数名是bbbb,如果要正确的传入参数,那么就要给参数命名,因为不用xml配置文件,那么我们就要用别的方式来给参数命名,这个方式就是@Param注解

4.在方法参数的前面写上@Param("参数名"),表示给参数命名,名称就是括号中的内容

public Student select(@Param("aaaa") String name,@Param("bbbb")int class_id);

给入参 String name 命名为aaaa,然后sql语句....where  s_name= #{aaaa} 中就可以根据aaaa得到参数值了

PS:下面看下spring中@param和mybatis中@param使用区别

1.spring中@param

 /**
   * 查询指定用户和企业关联有没有配置角色
   * @param businessId memberId
   * @return
   */
   int selectRoleCount(@Param("businessId") Integer businessId,@Param("memberId") Long memberId); 

2.mybatis中的param

  /**
   * 查询指定用户和企业关联有没有配置角色
   * @param businessId memberId
   * @return
   */
   int selectRoleCount(@Param("businessId") Integer businessId,@Param("memberId") Long memberId); 

从表面上看,两种并没有区别,但是在xml文件中使用的时候是有区别的,Spring中的@param在xml需要如下这样引用变量

<select id="selectRoleCount" resultType="java.lang.Integer" >
select 
  count(tbm.id)
  from t_business_member_relation tbm
  where tbm.business_id = #{0,jdbcType=INTEGER}
  and tbm.member_id = #{1,jdbcType=INTEGER}
  and tbm.role_business_id is not null
</select>

是根据参数的顺序来取值的,并且从0开始。而在mybatis @param在xml中则是如下这样引用变量的

<select id="selectRoleCount" resultType="java.lang.Integer" >
  select 
  count(tbm.id)
  from t_business_member_relation tbm
  where tbm.business_id = #{businessId,jdbcType=INTEGER}
  and tbm.member_id = #{memberId,jdbcType=INTEGER}
  and tbm.role_business_id is not null
 </select>

是通过参数名来引用的

注:如果Mapper.java文件中引用的是Spring的

org.springframework.data.repository.query.Param;

但是Mapper.xml中使用的是mybatis 的用法,那么就会如下的错误

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'businessId' not found. Available parameters are [1, 0, param1, param2]

截图如下

 

所以在使用的时候一定要注意@param引用和使用的一致性

总结

以上所述是小编给大家介绍的Mybatis中@Param的用法和作用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# mybatis  # param  # 用法  # mybatis中${}和#{}取值的区别分析  # MyBatis 中 ${}和 #{}的正确使用方法(千万不要乱用)  # Mybatis中@Param注解的作用说明  # Mybatis中${param}与#{param}的区别说明  # 的是  # 字段名  # 小编  # 就会  # 是有  # 就能  # 在此  # 则是  # 两种  # 而在  # 这段  # 给大家  # 要用  # 上看  # 要给  # 可以根据  # 命名为  # 中就  # 数据库中  # 所述 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 微信小程序 HTTPS报错整理常见问题及解决方案  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  如何在IIS中配置站点IP、端口及主机头?  海南网站制作公司有哪些,海口网是哪家的?  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  在centOS 7安装mysql 5.7的详细教程  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  如何在IIS中新建站点并配置端口与物理路径?  Laravel如何升级到最新版本?(升级指南和步骤)  在线教育网站制作平台,山西立德教育官网?  如何为不同团队 ID 动态生成多个独立按钮  Python3.6正式版新特性预览  Laravel如何实现多对多模型关联?(Eloquent教程)  北京专业网站制作设计师招聘,北京白云观官方网站?  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  jquery插件bootstrapValidator表单验证详解  教学论文网站制作软件有哪些,写论文用什么软件 ?  在线制作视频网站免费,都有哪些好的动漫网站?  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  bootstrap日历插件datetimepicker使用方法  SQL查询语句优化的实用方法总结  ,网页ppt怎么弄成自己的ppt?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  无锡营销型网站制作公司,无锡网选车牌流程?  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  如何在Tomcat中配置并部署网站项目?  微信小程序 canvas开发实例及注意事项  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  *服务器网站为何频现安全漏洞?  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  C++时间戳转换成日期时间的步骤和示例代码  Laravel如何自定义分页视图?(Pagination示例)  如何在服务器上三步完成建站并提升流量?  jQuery 常见小例汇总  原生JS实现图片轮播切换效果  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何在香港服务器上快速搭建免备案网站?  Bootstrap整体框架之CSS12栅格系统  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  深入理解Android中的xmlns:tools属性  Laravel如何使用Service Container和依赖注入?(代码示例)  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件