全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

用注解来简化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}的区别说明  # 的是  # 字段名  # 小编  # 就会  # 是有  # 就能  # 在此  # 则是  # 两种  # 而在  # 这段  # 给大家  # 要用  # 上看  # 要给  # 可以根据  # 命名为  # 中就  # 数据库中  # 所述 


相关文章: 如何用y主机助手快速搭建网站?  如何用狗爹虚拟主机快速搭建网站?  怎么将XML数据可视化 D3.js加载XML  SQL查询语句优化的实用方法总结  深圳网站制作平台,深圳市做网站好的公司有哪些?  建站之星后台密码遗忘或太弱?如何重置与强化?  如何选择香港主机高效搭建外贸独立站?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  网站制作话术技巧,网站推广做的好怎么话术?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  如何在自有机房高效搭建专业网站?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  建站之星会员如何解锁更多建站功能?  如何在建站之星网店版论坛获取技术支持?  如何用西部建站助手快速创建专业网站?  建站之星logo尺寸如何设置最合适?  ,如何利用word制作宣传手册?  内网网站制作软件,内网的网站如何发布到外网?  制作销售网站教学视频,销售网站有哪些?  Python文件管理规范_工程实践说明【指导】  如何通过商城免费建站系统源码自定义网站主题?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  建站之星收费标准详解:套餐费用及年费价格表一览  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  建站之星下载版如何获取与安装?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  定制建站策划方案_专业建站与网站建设方案一站式指南  如何快速上传建站程序避免常见错误?  家具网站制作软件,家具厂怎么跑业务?  常州企业建站如何选择最佳模板?  智能起名网站制作软件有哪些,制作logo的软件?  网站制作的步骤包括,正确网址格式怎么写?  建站上市公司网站建设方案与SEO优化服务定制指南  电商平台网站制作流程,电商网站如何制作?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  盐城做公司网站,江苏电子版退休证办理流程?  网站专业制作公司有哪些,做一个公司网站要多少钱?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  如何配置支付宝与微信支付功能?  建站之星代理如何获取技术支持?  宝塔建站后网页无法访问如何解决?  如何通过建站之星自助学习解决操作问题?  如何注册花生壳免费域名并搭建个人网站?  在线制作视频的网站有哪些,电脑如何制作视频短片?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  济南企业网站制作公司,济南社保单位网上缴费步骤?  宝塔面板如何快速创建新站点? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。