动态列名与使用 MyBatis 的 where 子句中的值进行比较
Dynamic column name compared with value in where clause using MyBatis
是否可以使用类似
的东西
SEARCH_QUERY = "select * from info where #{columnName}=\"#{columnValue}\"";
使用 MyBatis 3 ?
columnName 需要是动态的。
谢谢!
当你使用像#columnValue
这样的语法时,mybatis 将创建准备好的语句并为你绑定变量。这会产生几个后果:
- 您不需要在
#columnValue
周围加上引号
- 您不需要转义传递的值
#
只能在允许 JDBC 查询中的参数的情况下使用。所以你不能用它来生成动态列名
如果要生成动态查询,请改用 $columnName
。完整的查询如下所示:
select * from info where ${columnName}=#{columnValue}
要记住的重要一点是,如果您直接使用 JDBC,${columnName}
就像字符串连接一样被逐字查询,因此它很容易受到 SQL 注入,如果 columnName
是用户提供的东西。
是否可以使用类似
的东西SEARCH_QUERY = "select * from info where #{columnName}=\"#{columnValue}\"";
使用 MyBatis 3 ?
columnName 需要是动态的。
谢谢!
当你使用像#columnValue
这样的语法时,mybatis 将创建准备好的语句并为你绑定变量。这会产生几个后果:
- 您不需要在
#columnValue
周围加上引号
- 您不需要转义传递的值
#
只能在允许 JDBC 查询中的参数的情况下使用。所以你不能用它来生成动态列名
如果要生成动态查询,请改用 $columnName
。完整的查询如下所示:
select * from info where ${columnName}=#{columnValue}
要记住的重要一点是,如果您直接使用 JDBC,${columnName}
就像字符串连接一样被逐字查询,因此它很容易受到 SQL 注入,如果 columnName
是用户提供的东西。