各位大虾
我想执行一个完整的sql语句
如下//String sql = "select count(*) from "+tableName;
//int count = tableService.table_isExist(sql);可是不知道mybatis怎么配置 ?
我开始的配置是这样子的<select id="table_isExist" resultType="int" parameterType="java.lang.String">
     $sql$
</select>可是程序有问题 提示说无效字符 $sql$本来如果要实现查询表的数据条数是可以像下面这样子来做的//String tableName = req.getString("tableName");
//int count = tableService.table_isExist(tableName);mybatis配置:<select id="table_isExist" resultType="int" parameterType="java.lang.String">
     select count(*) from ${tableName}</select>可是我不想像上面这样子做
因为我还要自动创建表,想在控制层拼接sql后直接传sql给mybatis  而不去在mybatis配置文件做太复杂的配置。
请问该怎么做?
如果我没表达清楚  可以指出来  我再想法解释。  
在线等。

解决方案 »

  1.   

    mybatis怎么样? 为啥不是hibernate呢?
      

  2.   

    我mybatis木学过就用这个做项目  很多不会  就照葫芦画瓢做的。
    还没感觉到什么高深的东西。
      

  3.   

    使用${sql}可以做到,MyBatis好像不支持$sql$或#sql#,可能以前的版本支持吧,我试了一下它会原封不动地出现在sql语句中
    如果使用#{sql, jdbcType=VARCHAR}这样会预编译参数,生成的最终语句会变成Java中的PreparedStatement的栏位参数。
    如果使用${sql},这样等于直接把参数拼接到了上下文中,但是会有sql注入的风险。当然,如果这个参数不是来自用户输入,就不用担心注入问题了。
    <select id="table_isExist" resultType="int" parameterType="String">
         ${sql}
    </select>