jexl简单使用

Java 表达式语言 (JEXL)
JEXL 是一个库,旨在促进动态和脚本功能的实现 用 Java 编写的应用程序和框架。

做项目遇到需求:
取数据的值做条件判断,例:if(a>b) ,
但是数和判断条件全都要从数据库中取,就变成了这样

if(a>b){}
if(model.getA()   model.getCompare()  model.getB()){}

也就是a,b,判断条件 全都是动态变化的,按上面直接取出来if无法判断,所以需要jexl

需求:

  • a,b,判断条件全是数据库的值,实现动态判断

官方文档:https://commons.apache.org/proper/commons-jexl/index.html

@Test
void testJexl() {
    // 创建或检索引擎
    JexlEngine jexl = new JexlBuilder().create();

    // 创建表达式
    // 条件判断耦合写法
    String jexlExp = "a < b";
    JexlExpression e = jexl.createExpression( jexlExp );

    // 创建上下文并添加数据
    JexlContext jc = new MapContext();
    jc.set("a", 100);
    jc.set("b", 200);
    jc.set("<", ">");

    // 现在求表达式的值,得到结果
    Object o = e.evaluate(jc);
    System.out.println(o);
}

按规则 会变成 100 > 200 结果为false,但实际结果为:true
证明a,b可以动态设置,判断条件无法动态设置,所以改为用String.format格式化表达式

@Test
void testJexl() {
    // 创建或检索引擎
    JexlEngine jexl = new JexlBuilder().create();

    // 创建表达式
    // 条件判断耦合写法
//        String jexlExp = "a < b";
    // 解耦写法
    String jexlExp = String.format("a %s b", "<");
    JexlExpression e = jexl.createExpression( jexlExp );

    // 创建上下文并添加数据
    JexlContext jc = new MapContext();
    jc.set("a", 100);
    jc.set("b", 200);

    // 现在求表达式的值,得到结果
    Object o = e.evaluate(jc);
    System.out.println(o);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值