mysql数据库分表时,使用mybatis动态设置表名

版权声明:转载请注明原创地址 https://blog.csdn.net/ke369093457/article/details/81946058

mybatis中传递参数一般使用#{},但是当参数是表名时#{}就会报错。这是为啥呢?

这是因为#{ } 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符。

简单来讲:select * from user_#{tableVersion}

会被解析为select * from user_?

而${ } 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换

简单来讲:select * from user_#{tableVersion}

会被解析为select * from user_1

综上所得, ${ } 的变量的替换阶段是在动态 SQL 解析阶段,而 #{ }的变量的替换是在 DBMS 中。

#{}与${}的区别可以简单总结如下:
#{}将传入的参数当成一个字符串,会给传入的参数加一个双引号
${}将传入的参数直接显示生成在sql中,不会添加引号
#{}能够很大程度上防止sql注入,${}无法防止sql注入
${}一般用于传输数据库的表名、字段名等
能用#{}的地方尽量别用${}
 

猜你喜欢

转载自blog.csdn.net/ke369093457/article/details/81946058
今日推荐