ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mybatis xml里的sql使用ognl表达式,调用类里方法的时候

2022-06-24 15:37:13  阅读:160  来源: 互联网

标签:xml handle String 参数 split sql ognl Handle 方法


从官网copy:  

OGNL调用方法的方式与 Java 的方式略有不同,因为 OGNL是被解释的并且必须在运行时选择正确的方法,除了提供的实际参数之外没有额外的类型信息。OGNL总是选择它可以找到的最具体的方法,其类型与提供的参数匹配;如果有两个或多个同样具体且与给定参数匹配的方法,则将任意选择其中一个。

特别是,空参数匹配所有非原始类型,因此最有可能导致调用意外的方法。

请注意,方法的参数由逗号分隔,因此除非将逗号括在括号中,否则不能使用逗号运算符.

 

调用类方法的时候,格式为:${@类的全路径@方法名(args)}

 

那如果是简单的方法,如,没有参数,和一两个参数就比较好解决。

那如果是集合或者数组呢?

我定义了一个这样的类的方法来处理:

public class Handle{

 public static String handle(String ... args){
   ...   
 }


}

我的xml原本是这么写的:

select 
*,${@com.zkj.utils.Handle@handle("1","2")} from t_user
      where username like '%${namePart}%'

但是这样不行,提示参数不匹配,需要将参数转为数组才行。

那这里就很奇怪了,如果我这样做,是可以的:

select *,${@com.zkj.utils.Handle@handle(@java.util.Arrays@asList("'1'","'2'"))} from t_user
      where username like '%${namePart}%'

就是说,如果改写handle里面的参数,将参数类型改为list,则可以成功执行。

但是,这里asList里面的参数,依然是T... args这样的类型的,都是这种格式,我定义的却不能成功。

 

由于项目里别的地方也用了这个方法,为了防止对其他人进行干扰,所以我又定义了一个split方法:

public static String[] split(String arg){
   return arg.split(",");  
}

那这样就可以这么用:

select *,${@com.zkj.utils.Handle@handle(@com.zkj.utils.Handle@split("'1','2'"))} from t_user
        where username like '%${namePart}%'

 

这样就可以解决这个问题了。

那有人问我,能不能直接定义数组,传过去呢?

我之前试了好多次,如:new String[]{"1","2"}, new java.lang.String[]{"1","2"},{"1","2"},["1","2"]

  所有的这些格式,都提示格式或者语法有误。

 

如果读者有更简单的方式,还请告诉我,谢谢

 

 

标签:xml,handle,String,参数,split,sql,ognl,Handle,方法
来源: https://www.cnblogs.com/zkj1204/p/16409051.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有