IfSqlNode是if标签的sql节点,提供解析if标签节点的功能。

    1. package com.example.aninbatis.sqlnode;
    2. import com.example.aninbatis.sqlsource.DynamicContext;
    3. import com.example.aninbatis.utils.OgnlUtils;
    4. /**
    5. * if 标签的sql节点
    6. */
    7. public class IfSqlNode implements SqlNode {
    8. /**
    9. * 布尔表达式
    10. */
    11. private String test;
    12. /**
    13. * 子SqlNode集合
    14. */
    15. private SqlNode rootSqlNode;
    16. public IfSqlNode(String test, SqlNode rootSqlNode) {
    17. this.test = test;
    18. this.rootSqlNode = rootSqlNode;
    19. }
    20. @Override
    21. public void apply(DynamicContext context) {
    22. // 使用Ognl的api来对test标签属性中的布尔表达式进行处理,获取布尔值
    23. boolean evaluateBoolean = OgnlUtils.evaluateBoolean(test, context.getBindings().get("_parameter"));
    24. // 如果test标签属性中的表达式判断为true,才进行子节点的处理
    25. if (evaluateBoolean) {
    26. rootSqlNode.apply(context);
    27. }
    28. }
    29. }