我现在需要做一个根据外界输入的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}的值?
当然不行了#是变量替换,怎么还可能替换一次?
你把sql放在prop里是什么作
######给你一个可行的操作,就是带参数的sql,在传进 mybatis xml 之前,将sql 中的参数先替换掉(变为不带参数的 sql),再传到后台就可以啦。至于说道,怎么将参数替换掉,这个可以思考一下,mybatis 好像有提供现成的 api。其实自己实现也不是很难的。
还是给你一个现成的吧:
http://blog.csdn.net/isea533/article/details/40044417
楼主:使用${sql},而不是#{sql};
<select id="queryInfo" paramterType="Map" resultType="Map"> ${sql} </select>
楼主:使用${sql},而不是#{sql};
<select id="queryInfo" paramterType="Map" resultType="Map"> ${sql} </select>
恩,我也认为是这个。
另外请自己做好防SQL注入的风险
######如此麻烦,何必用mybatis呢?版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。