博客
关于我
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/

    你可能感兴趣的文章
    linux防火墙规则
    查看>>
    Linux高阶知识:Linux 中的隐藏文件
    查看>>
    Linux(3):Linux命令-文件管理
    查看>>
    Linux(7):VIM的使用
    查看>>
    linux(乌班图)修改apt下载源
    查看>>
    Linux:CentOS安装Docker Compose
    查看>>
    Linux:安装Redis
    查看>>
    List<T> to DataTable
    查看>>
    ListBox 循环删除当前项
    查看>>
    Listview 利用Datapager进行分页
    查看>>
    listview数据刷新后自动滑到底部
    查看>>
    list循环删除元素中的坑
    查看>>
    liunx-FTP服务器_无需整理
    查看>>
    Liunx挂载nfts盘数据方法
    查看>>
    liunx查找当前目录文件及子目录文件下的中文并替换
    查看>>
    LiveGBS user/save 逻辑缺陷漏洞复现(CNVD-2023-72138)
    查看>>
    live和on的区别
    查看>>
    li下的ul----多级列表
    查看>>
    llm 从0开始学习大语言模型, transformer架构学习
    查看>>
    LLM;超越记忆《第 2 部分 》
    查看>>