获取Mybatis中的sql

项目中需要获取mapper中的sql语句,方便Influxdb使用,分有参数和无参数

1、有参数

    public static String getSql(String id, Object parameterObject){
        String sql = factory.getConfiguration().getMappedStatement(id).getBoundSql(parameterObject).getSql();
        List<ParameterMapping> parameterMappings = factory.getConfiguration().getMappedStatement(id).getSqlSource().getBoundSql(parameterObject).getParameterMappings();
        String val = null;
        for(ParameterMapping mapping : parameterMappings){
            try {
                val = BeanUtils.getProperty(parameterObject, mapping.getProperty());
            } catch (Exception e) {
                e.printStackTrace();
            }
            sql = sql.replaceFirst("\\?", val);
            log.debug("mapping: {}  pro: {}  val:{}", mapping, mapping.getProperty(), val);
        }
        return sql;

2、无参数

    public static String getSql(String id){
        String sql = factory.getConfiguration().getMappedStatement(id).getBoundSql(null).getSql();
        return sql;
    }

 

posted @ 2023-09-13 16:16  烤乳鸽  阅读(445)  评论(0)    收藏  举报