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)
上一篇 2022年6月13日 下午7:46
下一篇 2022年6月13日 下午8:00


相关推荐

  • 在Linux系统中安装pycharm详解

    在Linux系统中安装pycharm详解1 在官网下载 pycharm 安装包 1 1 进入官网 DownloadPyCh PythonIDEfor 选择 Professional 专业版 直接下载 自己可以选择 pycharm 的不同版本 1 2 进入跳转页面后 出现提示框 点 savefile 1 3 下载完成后 打开安装包下载的位置 2 安装 pycharm2 1 解压文件 2 打开终端 进入 pych

    2025年6月20日
    5
  • Σ求和符号_西格玛符号怎么打

    Σ求和符号_西格玛符号怎么打转自:https://zh.wikipedia.org/wiki/%E6%B1%82%E5%92%8C%E7%AC%A6%E5%8F%B7求和符号(Σ,sigma),是欧拉于1755年首先使用的。这个符号是源于希腊文σογμαρω(增加)的字头,Σ正是σ的大写。求和的结果是给定的数值相加后的总值,又称加总。举例而言,若有4个数值:1、3、5、7,则这4个数值的总和为:

    2022年10月9日
    4
  • Jute,通信协议

    Jute,通信协议序列化 概述 对于一个网络通信 首先需要解决的就是对数据的序列化和反序列化处理 在 ZooKeeper 中 使用了 Jute 这一序列化组件来进行数据的序列化和反序列化操作 同时 为了实现一个高效的网络通信程序 良好的通信协议设计也是至关重要的 Zookeeper 团队曾想过将 Jute 替换成 Apache 的 Avro 或是 Google 的 protobuf 但是考虑到新老版本序列化组件的兼容性和当前 Jute

    2026年3月17日
    2
  • 考勤管理系统需求分析说明书

    考勤管理系统需求分析说明书目录一 引言 1 1 编写目的 1 2 背景 1 3 编写对象 1 4 参考资料二 任务概述 2 1 任务目标 2 2 运行环境 2 3 条件限制三 功能需求 3 1 功能描述 3 2 静态数据 3 3 动态数据 3 4 数据字典四 需求规定 4 1 运行需求 4 2 非性能需求附录任务分工一 引言 1 1 编写目的通过该系统考核学生

    2025年9月21日
    6
  • pycharm最新激活码-激活码分享「建议收藏」

    (pycharm最新激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
    86
  • vhdl testbench实例_支持veriloghdl的工具及获取方法

    vhdl testbench实例_支持veriloghdl的工具及获取方法VHDL与VerilogHDL的Testbench模板一般而言,一个testbench需要包含的部分如下:(1)VHDL:entity和architecture的声明;Verilog:moduledeclaration(2)信号声明(3)实例化待测试文件(4)提供仿真激励其中第(4)步是关键所在,需要完成产生时钟信号,以及提供激励信号两个任务。VHDLTestbench中产生…

    2025年12月3日
    6

发表回复

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

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