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

2022/6/25 2:19:49

本文主要是介绍mybatis xml里的sql使用ognl表达式,调用类里方法的时候,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

从官网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"]

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

 

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

 

 



这篇关于mybatis xml里的sql使用ognl表达式,调用类里方法的时候的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程