Mybatis中传递多个参数的4种方法总结[通俗易懂]

Mybatis中传递多个参数的4种方法总结[通俗易懂]方法1:顺序传参法#{}里面的数字代表你传入参数的顺序。这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。方法2:@Param注解传参法#{}里面的名称对应的是注解 @Param括号里面修饰的名称。这种方法在参数不多的情况还是比较直观的,推荐使用。方法3:Map传参法#{}里面的名称对应的是 Map里面的key名称。这种方法适合传递多个参数…

大家好,又见面了,我是你们的朋友全栈君。

方法1:顺序传参法

Mybatis中传递多个参数的4种方法总结[通俗易懂]

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

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

方法2:@Param注解传参法

Mybatis中传递多个参数的4种方法总结[通俗易懂]

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

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

方法3:Map传参法

Mybatis中传递多个参数的4种方法总结[通俗易懂]

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

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

方法4:Java Bean传参法

Mybatis中传递多个参数的4种方法总结[通俗易懂]

#{}里面的名称对应的是 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。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147206.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mdb文件怎么打开

    mdb文件怎么打开

    2021年10月9日
    110
  • tfw格式图解[通俗易懂]

    tfw格式图解[通俗易懂]TFW格式,是关于TIFF影像坐标信息的文本文件。其它影像格式的坐标信息描述文件与其格式是一样的,后缀名可能不同。(bmp-bpw/png-pgw/jpg-jpw)话不多说,直接看图。上图中的UV坐标,实际上只的是图像的横向坐标和纵向坐标 。即图像的行和列坐标。 对于图上任意一个像素点(col,row)这个坐标,换算其地理坐标就十分简单。GeoX=1000.000+…

    2025年7月31日
    0
  • 更换pip源到国内镜像(docker更换阿里镜像源)

    #默认自动安装python-mpipinstall–upgradepip#一般库的本地安装pipinstallfilename.whl#pip的本地安装及版本显示python-mpipinstallpip-20.0.2-py2.py3-none-any.whlpip-Vpip项目下载地址国内镜像源https://pypi.tuna.tsinghua.edu.cn/simple#清华http://mirrors.aliyun.com/pyp.

    2022年4月11日
    41
  • C#中FileStream与StreamReader/StreamWriter区别

    C#中FileStream与StreamReader/StreamWriter区别FileStreamFileStream类不是静态类,表示在磁盘或网络路径上指向文件的流。这个类提供了在文件中读写字节的方法,但经常使用StreamReader或StreamWriter执行这些功能。这是因为FileStream类操作的是字节和字节数组,而Stream类操作的是字符数据。使用时需要创建对象,FileStream类既可以对文本文件进行读也可以对多媒体文件进行写,以字节数组的形式进…

    2022年7月21日
    16
  • 微信养号防封攻略_防封群微信怎么卖「建议收藏」

    微信养号防封攻略_防封群微信怎么卖「建议收藏」任何企业或者个人做营销或者推广等等一切都离不开微信,有很多企业和个人的生存渠道就是微信,如果把微信号封了,几乎是断了他们生存的机会,在这样的大环境下,把自己企业和个人的微信号养好,就成了非常重要的一个环节。微信能安全使用,是所有一切的基础。但是很多人现在还不懂的去操作养号,这几天我个人也陆续有号被封,所以我就整理了一下微信养号的操作方法。自己可以使用,也顺便分享给更多的人,这个操作方法涵盖了微信每天养号需要必须要操作的动作,这些动作是每天必须要操作的。先说一下微信权重的影响因素微信养号一、微信权重

    2022年5月15日
    91
  • navicat v15.0.23.0激活码【2021.8最新】「建议收藏」

    (navicat v15.0.23.0激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~Z9LZO4ZKWA-eyJsaWNlbnNlSWQiOi…

    2022年3月22日
    106

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号