DynamicSqlSource专门封装和处理带有${}和动态sql标签的sql语句。

    1. package com.example.aninbatis.sqlsource;
    2. import com.example.aninbatis.sqlnode.MixedSqlNode;
    3. import com.example.aninbatis.sqlnode.SqlNode;
    4. /**
    5. * 专门封装和处理带有${}和动态sql标签的sql语句
    6. */
    7. public class DynamicSqlSource implements SqlSource {
    8. private SqlNode rootSqlNode;
    9. public DynamicSqlSource(MixedSqlNode rootSqlNode) {
    10. this.rootSqlNode = rootSqlNode;
    11. }
    12. /**
    13. * 在sqlsession执行的时候,才调用该方法
    14. */
    15. @Override
    16. public BoundSql getBoundSql(Object param) {
    17. //首先先调用SqlNode的处理,将动态标签和${}处理一下
    18. DynamicContext context = new DynamicContext(param);
    19. rootSqlNode.apply(context);
    20. // 再调用SqlSourceParser来处理#{}
    21. SqlSourceParser sqlSourceParser = new SqlSourceParser();
    22. SqlSource sqlSource = sqlSourceParser.parse(context.getSql());
    23. return sqlSource.getBoundSql(param);
    24. }
    25. }