开发者社区> 问答> 正文

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}的值?

展开
收起
爱吃鱼的程序员 2020-06-14 18:04:03 795 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    当然不行了#是变量替换,怎么还可能替换一次?

    你把sql放在prop里是什么作

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

    还是给你一个现成的吧:

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

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

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

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



    引用来自“xmut”的评论

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

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



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

相关电子书

更多
SQL Server云化思考与实践 立即下载
RDS SQL Server CPU高使用率性能优化 立即下载
Java Spring Boot开发实战系列课程【第6讲】:Spring Boot 2.0实战MyBatis与优化(Java面试题) 立即下载