为了防止SQL注入,MyBatis在调用Mapper中的SQL语句是,会为变量值自动加单引号
如
select * from table_a where name=#{name}
如果变量name=“abc”,则实际执行的SQL语句为
select * from table_a where name='abc'
但如果变量是表名,就会出现问题
如
create table if not exists #{tableName}(name varchar(128))
如果变量tableName="abc",则实际执行的SQL为
create table if not exists 'abc'(name varchar(128))
此SQL无法执行,其实可以将变量引用方式#{}改为${}
create table if not exists ${tableName}(name varchar(128))
则实际执行SQL为
create table if not exists abc(name varchar(128))