自定义ORM(mybatis)源码(五)-sql解析

自定义ORM(mybatis)源码(五)-sql解析

模仿mybatis

解析sql中的占位符,并替换成 sql 中的 ?

TokenHandler

public interface TokenHandler {
    String handleToken(String content);
}

直接借用mybatis中以下几个类:

  • GenericTokenParser
  • ParameterExpression
  • ParameterMappingTokenHandler: 处理占位符

ParameterMapping

将 ParameterMappingTokenHandler 处理解析出来的占位符放在 ParameterMapping 中,供 MapperProxy使用

BoundSql

包括原始sql 和解析完成的 sql

@Data
public class BoundSql {

    /**
     * 原始 xml 中的 sql,包括点位符
     */
    private String sql;

    private String executeSql;

    private ParameterMappingTokenHandler tokenHandler;

    private GenericTokenParser tokenParser;

    public BoundSql(String sql) {
        this.sql = sql;
        tokenHandler = new ParameterMappingTokenHandler();
        tokenParser = new GenericTokenParser("#{", "}", tokenHandler);
        executeSql = tokenParser.parse(sql);
    }

    /**
     * 获取sql 占位符名称
     * @return
     */
    public List<ParameterMapping> getParameterMappers() {
        return tokenHandler.getParameterMappings();
    }

    public String getParsedSql() {
        return executeSql;
    }
}

你可能感兴趣的:(mybatis,mybatis)