各位大虾
我想执行一个完整的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配置文件做太复杂的配置。
请问该怎么做?
如果我没表达清楚 可以指出来 我再想法解释。
在线等。
我想执行一个完整的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配置文件做太复杂的配置。
请问该怎么做?
如果我没表达清楚 可以指出来 我再想法解释。
在线等。
还没感觉到什么高深的东西。
如果使用#{sql, jdbcType=VARCHAR}这样会预编译参数,生成的最终语句会变成Java中的PreparedStatement的栏位参数。
如果使用${sql},这样等于直接把参数拼接到了上下文中,但是会有sql注入的风险。当然,如果这个参数不是来自用户输入,就不用担心注入问题了。
<select id="table_isExist" resultType="int" parameterType="String">
${sql}
</select>