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表达式,调用类里方法的时候的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14XMLHTTPRequest教程:初学者必备指南
- 2024-10-10XMLHTTPRequest项目实战:从入门到上手
- 2024-02-26lxml not found please install it
- 2022-09-16使用Druid数据源-开启监控-xml的方式-配置类的方式
- 2022-09-08IDEA中pom.xml配置文件依赖文件版本号报红的最有效解决办法
- 2022-09-05如何更换项目中web.xml的版本
- 2022-09-02使用dom4j xml解析文件数据
- 2022-08-24可扩展标记语言——XML
- 2022-08-23mybatis 配置文件mybatis.xml的加载过程
- 2022-08-162022最新有效 哔哩哔哩Bilibili手机端.m4s文件缓存转.mp4教程 支持每个视频单独一个文件夹 支持转换xml弹幕