You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MyBatis如何在XML映射文件中定义数组并传入Java静态方法?

MyBatis mapper文件传递String数组到Java静态方法实现方案

该操作完全可以实现,MyBatis内置的OGNL表达式支持直接构造数组类型,同时支持调用Java静态方法,二者可以结合使用完成需求。

实现步骤

1. 准备待调用的Java静态方法

首先确保目标方法为public static修饰,入参类型匹配String数组,示例如下:

package com.example.common;

import java.util.Arrays;

public class ArrayProcessUtil {
    // 示例方法:对传入的String数组进行去重处理
    public static String[] deduplicateStrArray(String[] originArray) {
        if (originArray == null) {
            return new String[0];
        }
        return Arrays.stream(originArray).distinct().toArray(String[]::new);
    }
}

2. 在mapper映射文件中调用

分为两种常见场景:

  • 场景1:直接在mapper中自定义String数组作为参数传递
    直接通过OGNL语法构造数组,传入静态方法即可:
<select id="queryUserByTags" resultType="com.example.entity.User">
    SELECT id,username,tags FROM user
    <where>
        FIND_IN_SET(tag,
        <!-- 直接构造String数组传入静态方法,获取处理后的返回值作为查询参数 -->
        #{@com.example.common.ArrayProcessUtil@deduplicateStrArray(new String[]{'admin','normal','guest'})}
        )
    </where>
</select>
  • 场景2:将Mapper接口传入的String数组参数转发给静态方法
    如果数组是从业务层通过Mapper接口传递过来的,直接写参数名即可:
    Mapper接口示例:
List<User> queryUserByTags(String[] tags);

对应的Mapper xml写法:

<select id="queryUserByTags" resultType="com.example.entity.User">
    SELECT id,username,tags FROM user
    <where>
        FIND_IN_SET(tag,
        #{@com.example.common.ArrayProcessUtil@deduplicateStrArray(tags)}
        )
    </where>
</select>

注意事项

  • 调用静态方法时如果类不在java.lang包下,必须写全限定类名
  • 构造数组的OGNL语法和Java原生语法一致,要保证数组元素类型和静态方法入参类型匹配,避免出现类型转换异常
  • 如果静态方法有多个参数,按顺序传入即可,数组可以和其他类型参数混合传递

内容的提问来源于stack exchange,提问作者Dawid Pawlak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:45:05