OGNL 主要是Mybatis内部用来判断条件的工具。 例如
<if test="id != null">
and id = #{id}
</if>
if 标签中的 test = "id != null" ,这里的 id != null 就会借助 OGNL 表达式进行判断,如果 user对象的 id 属性不为 null, 那么就会拼接上 sql "and id = #{id}"
示例:
@Test
public void ognlTest() {
User user = new User();
user.setId("1");
user.setName("张三");
List<Integer> list = Arrays.asList(1,2,3,4);
user.setList(list);
ExpressionEvaluator evaluator = new ExpressionEvaluator();
// 1. 访问属性
assert evaluator.evaluateBoolean("id != null && name != null", user);
// 2. 调用方法
assert evaluator.evaluateBoolean("list.size() == 4", user);
assert evaluator.evaluateBoolean("list.get(0) == 1", user);
// 3. 直接通过下标访问
assert evaluator.evaluateBoolean("list[1] == 2", user);
// 4. 迭代
Iterable<Integer> iterable = (Iterable<Integer>) evaluator.evaluateIterable("list", user);
AtomicInteger index = new AtomicInteger(1);
iterable.forEach(i -> {
assert i == index.getAndIncrement();
});
}