博客
关于我
Mapper映射文件传参(数组/集合)与#{}和${} 区别
阅读量:795 次
发布时间:2023-02-06

本文共 1235 字,大约阅读时间需要 4 分钟。

MyBatis Mapper映射文件传参的数据类型及其处理方式

在MyBatis中,Mapper映射文件的参数传递方式有多种,理解这些方式对于优化SQL执行性能至关重要。本文将从不同参数类型入手,详细讲解Mapper文件中参数的传递规则及注意事项。

一、Mapper映射文件传参的数据类型

  • 单个参数处理
  • MyBatis对于只有一个参数的情况下,不会做任何额外处理。在Mapper文件中,可以直接使用#{参数名}来接收参数。例如,传递一个id值,Mapper文件中可以使用#{id}来接收,因为只有一个参数id#{}内可以是任意字符串,建议使用id以增强可读性。

    1. 多个参数处理
    2. 当传递多个参数时,MyBatis会将这些参数封装为一个Map对象。在Mapper文件中,通过@Param("参数名")注解可以自定义Map对象中的键值对,从而实现参数名与Mapper文件中接收参数名的一致性。例如,传递idstate两个参数,可以在Mapper文件中使用#{id}#{state}来接收。

      1. 集合或数组参数处理
      2. 对于集合(如List、Set)或数组类型的参数,MyBatis也会将其封装为一个Map对象。在Mapper文件中,可以通过collection[index]list[index]来接收集合中的元素。例如,传递一个List参数,可以在Mapper文件中使用#{collection[0]}来接收第一个元素。

        1. 数组类型参数处理
        2. 对于数组类型的参数,MyBatis在Mapper文件中使用array[index]来接收数组中的元素。例如,传递一个String数组参数,可以在Mapper文件中使用#{array[0]}来接收数组中的第一个元素。

          二、#{}与${}的区别

          在MyBatis中,#{}${}都可以用于动态传递参数,但它们有不同的工作原理和适用场景。

        3. #{}
        4. #{}对应底层的JDBC PreparedStatement对象,在SQL中相当于一个参数占位符?。它支持类型转换和安全的SQL注入防护。#{}内可以写接收参数的名称,例如#{id},可以设置javaTypejdbcTypemode等属性。

          1. ${}
          2. ${}对应底层的JDBC Statement对象,用于字符串拼接。它直接将参数值拼接到SQL语句中,编译和执行时才生成最终的SQL语句。${}不支持类型转换,也无法防止SQL注入,主要用于表名称、排序字段等场景。

            总结

            通过以上介绍,可以看出MyBatis在Mapper文件中处理不同类型参数的方式各有特点。对于基本数据类型参数,直接使用#{参数名}即可;对于多个参数,建议使用@Param("参数名")注解以增强可读性;对于集合或数组参数,使用collection[index]list[index]来接收;对于数组类型参数,使用array[index]来接收。同时,选择合适的#{}${}来实现参数传递,以确保系统安全和高效运行。

    转载地址:http://irufk.baihongyu.com/

    你可能感兴趣的文章
    MajorDoMo thumb.php 未授权RCE漏洞复现(CNVD-2024-02175)
    查看>>
    Majorization-Minimization (MM) 和 Successive Convex Approximation (SCA)
    查看>>
    Makefile 使用小结
    查看>>
    makefile 打印
    查看>>
    makefile工作笔记0001---认识使用makefile
    查看>>
    Makefile遗漏分隔符错误解决
    查看>>
    Making the Grade [POJ3666] [DP]
    查看>>
    malloc和定位new表达式
    查看>>
    Malor Mass(分子量)
    查看>>
    MAMP无法正常启动,错误提示The built-in Apache is active
    查看>>
    mamp环境下navicat无法链接本地mysql
    查看>>
    Managing CentOS/RHEL kernel modules.
    查看>>
    Mangoa-Auth/芒果自助多应用企业级授权系统拥有盗版入库、远程更新等功能
    查看>>
    MangoDB4.0版本的安装与配置
    查看>>
    Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
    查看>>
    Manjaro 24.2 “Yonada” 发布:尖端功能与精美界面再度进化
    查看>>
    Manjaro Linux 推出新不可变版本:扩展产品范围,开放社区反馈和测试
    查看>>
    Manual write code to record error log in .net by Global.asax
    查看>>
    map 函数返回的列表在使用一次后消失
    查看>>
    Map 遍历取值及jstl的取值
    查看>>