开发者社区> 问答> 正文

mybatis可以从后台将带参数的sql传到xml中吗?:报错

我现在需要做一个根据外界输入的sql来自动导出报表的系统,现在遇到一个问题:

我想从properties文件中读取sql,sql可能带有参数,然后java后台去读取properties文件获取sql,然后把sql和其它的参数一起放进Map作为参数传入mybatis的xml文件中,经过测试:不带参数的sql是可以作为参数传入的,带参数的sql就报错。如:select name from temp where id=#{id}, 

在properties文件中sql=select name from temp where id=#{id},后台Properties pro = new Properties(); InputStream path = Thread.currentThread().getContextClassLoader().getResourceAsStream(param.properties); pro.load(path); 

String sql = pro.getProperty("sql");

HashMap<String,String> map = new HashMap<String,String>();

map.put("sql",sql);

map.put("id",1);

exService.queryInfo(map); 此方法将会执行查询

-------export.xml如下

<select id="queryInfo" paramterType="Map" resultType="Map">

    #{sql}

</select>

运行结果报错,是不是没获取到#{id}的值?

展开
收起
kun坤 2020-06-07 20:37:42 456 0
1 条回答
写回答
取消 提交回答
  • 当然不行了#是变量替换,怎么还可能替换一次?

    你把sql放在prop里是什么作

    ######

    给你一个可行的操作,就是带参数的sql,在传进 mybatis xml 之前,将sql 中的参数先替换掉(变为不带参数的 sql),再传到后台就可以啦。至于说道,怎么将参数替换掉,这个可以思考一下,mybatis 好像有提供现成的 api。其实自己实现也不是很难的。

    还是给你一个现成的吧:

    http://blog.csdn.net/isea533/article/details/40044417

    ######另外一种方法,以纯java代码编写mybatis的执行代码(不使用xml)######另外一种实现方式,以纯java代码编写(不通过xml文件)######

    楼主:使用${sql},而不是#{sql};

    <select id="queryInfo" paramterType="Map" resultType="Map">
        ${sql}
    </select>



    ######

    引用来自“xmut”的评论

    楼主:使用${sql},而不是#{sql};

    <select id="queryInfo" paramterType="Map" resultType="Map">
        ${sql}
    </select>



    恩,我也认为是这个。

    另外请自己做好防SQL注入的风险

    ######如此麻烦,何必用mybatis呢?
    2020-06-07 20:37:49
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载