前言

现在大多项目都是使用Mybatis了,但也有些公司使用Hibernate。使用Mybatis最大的特性就是sql需要自己写,而写sql就需要传递多个参数。面对各种复杂的业务场景,传递参数也是一种学问。

下面给大家总结了以下几种多参数传递的方法。

方法1:顺序传参法

#{}里面的数字代表你传入参数的顺序。

这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。

方法2:@Param注解传参法

#{}里面的名称对应的是注解 @Param括号里面修饰的名称。

这种方法在参数不多的情况还是比较直观的,推荐使用。

方法3:Map传参法

#{}里面的名称对应的是 Map里面的key名称。

这种方法适合传递多个参数,且参数易变能灵活传递的情况。

方法4:Java Bean传参法

#{}里面的名称对应的是 User类里面的成员属性。

这种方法很直观,但需要建一个实体类,扩展不容易,需要加属性,看情况使用。

使用Mapper接口时参数传递方式

Mybatis在使用Mapper接口进行编程时,其实底层是采用了动态代理机制,表面上是调用的Mapper接口,而实际上是通过动态代理调用的SqlSession的对应方法,如selectOne(),有兴趣的朋友可以查看DefaultSqlSession的getMapper()方法实现,其最终会获得一个代理了Mapper接口的MapperProxy对象。MapperProxy对象在调用Mapper接口方法时会把传递的参数做一个转换,然后把转换后的参数作为入参调用SqlSession对应的操作方法(如selectOne、insert等)。转换过程可以参考MapperMethod的execute()方法实现。简单来说是以下规则:

1、如果传递过来是单参数,且没有以@Param注解进行命名,则直接将单参数作为真实的参数调用SqlSession的对应方法。

2、如果传递过来的不是单参数或者是包含以@Param注解进行命名的参数,则会将对应的参数转换为一个Map进行传递。具体规则如下:

2.1、 会把对应的参数按照顺序以param1、param2、paramN这样的形式作为Key存入目标Map中,第一个参数是param1,第N个参数是paramN。

2.2、 如果参数是以@Param注解命名的参数,则以@Param指定的名称作为Key存入目标Map中。

2.3、 如果参数不是以@Param注解命名的,则按照顺序以0、1、N这样的形式作为Key存入目标Map中,第一个参数是0,第N个参数是N。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

mybatis添加方法可以传map吗_Mybatis中传递多个参数的4种方法总结相关推荐

  1. WebAPI Post模式下传递、接收参数的几种方法

    创建实体类 前一篇博客讲了Get模式下的传递.接收参数的几种方法,现在来介绍一下Post模式下传递.接收参数的几种方法.首先还是老样子,创建一个空的ASP.NET WebAPI工程,在Models文件 ...

  2. Action 中接收表单参数的3种方法总结

    (1) Action 中使用属性接受参数 @ Action中需要包含与表单参数对应的setXxx()方法: @ 简单易用,但当表单参数较多时不太适用: (2)使用DomainModel( 域模型:系统 ...

  3. WebAPI Get模式下传递、接收参数的几种方法

    创建实体类 创建一个空的ASP.NET WebAPI工程,在Models文件夹下创建一个实体类:User,代码如下: using System; using System.Collections.Ge ...

  4. mybatis添加方法可以传map吗_Mybatis创建方式二

    今天我们一起来学习一下Mybatis的另一种创建方式:mapper接口的创建方法 这里就不再写导包的步骤了 第一步:创建Mybatis的xml文件 <?xml version="1.0 ...

  5. mybatis中mapper接口的参数设置几种方法

    方法一:忽略parameterType,加@param("xxx")注解 在mapper接口中加上@param("xxx")注解,则在配置文件中直接用即可 Li ...

  6. vbs执行ctrl+空格_VBS中解决路径带空格的三种方法

    vbs中,如果需要运行的程序中带有空格,按照通常的方式往往会提示错误,其实有两种形式不同的解决方法: 在应用程序前后分别加三个双引号,代码如下: Set wshell=CreateObject(&qu ...

  7. mysql模糊查询xml_在userMapper.xml文件中模糊查询的常用的3种方法

    在userMapper.xml文件中新建映射sql的标签 select from users name like "%"#{name}"%" and phone ...

  8. JS获取URL中参数值(QueryString)的4种方法分享

    http://www.jb51.net/article/48942.htm JS获取URL中参数值(QueryString)的4种方法分享 作者: 字体:[增加 减小] 类型:转载 今天碰到要在一个页 ...

  9. python 命令-python解析命令行参数的三种方法详解

    这篇文章主要介绍了python解析命令行参数的三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python解析命令行参数主要有三种方法: ...

最新文章

  1. java解析各种文档格式_java读取各类型的文件
  2. python绘制月亮_用python画月亮的代码是什么?
  3. 下一代Asp.net开发规范OWIN(2)—— Katana介绍以及使用
  4. Android 2.2
  5. 如何选择String
  6. 历经5代跨越25年的RTC架构演化史
  7. 计算机考试演示文稿模板,2018职称计算机考试PowerPoint习题10
  8. 第三章:选择结构(一)
  9. 百度推出海外版网盘:竟免费不限速
  10. 【Flink】Flink 与数据库的集成最佳实践 【视频笔记】
  11. sql转化为int类型
  12. 联想小新潮7000-13 型号:LENOVO 81BS 制作黑苹果,MACos 10.14.2+WIN 10 双系统
  13. 小程序colorui引入与使用
  14. mysql数据库修改约束_mysql约束以及数据库的修改
  15. ios 直播间点赞动画
  16. MVC、MVP、MVVM:谁才是Android开发的终极之选?
  17. 为什么计算机不能进行十进制,计算机为什么用二进制而不是十进制?
  18. 图像正交变换的研究意义
  19. SeaJS入门教程系列之使用SeaJS(二)
  20. linux 问题-——退出vi编辑器 wq失效

热门文章

  1. 地平线机器人_地平线机器人CEO余凯:基于深度学习的自动驾驶之路
  2. 一个快速生成元素背景的 React 组件
  3. 产品经验谈:推荐系统实战案例-如何寻找有用的用户行为?
  4. 跨语言、多语言信息检索
  5. Python应用实战-Clumper | dplyr式的Python数据操作包
  6. 中科软测试面试题2019_2019国考成绩今日是否会发布,笔试120能进面不?
  7. java同步方法的特点_java多线程有哪些优点?同步实例代码展示
  8. oracle sql为null值,在SQL Server Oracle MySQL当数据库中查出某值为NULL怎么办
  9. 平台日志架构说明log4j漏洞问题解析
  10. Vue过渡 动画混入