`
buddie
  • 浏览: 185718 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MyBatis变量自动加单引号问题

阅读更多

为了防止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))

 

 

分享到:
评论

相关推荐

    在MySQL concat里面使用多个单引号,三引号的问题

    当你在`CONCAT`中处理包含单引号或者三引号的字符串时,需要特别注意如何正确地表示它们,以避免语法错误。 1. **单引号的使用**: 在SQL中,单引号用于定义字符串常量。例如,`'Hello'`是一个包含文本"Hello"的...

    mybatis 映射文件中if标签判断字符串相等的两种方式

    这种方式看似简单,但需要注意的是,MyBatis会自动处理单引号内的值,将其转换为对应的Java数据类型。对于字符'Y',MyBatis会将其视为一个字符类型。而在Java中,字符类型与字符串类型的比较需要特别处理,直接使用 ...

    mybatis入门

    - 在排序时使用`orderby`动态参数时,建议使用`$`而不是`#`,因为`#`会自动添加引号,可能导致SQL语法错误。 - 对于复杂的条件判断和动态SQL构建,MyBatis提供了丰富的标签如`<if>`、`<choose>`、`<when>`、`...

    Mybatis出现ORA-00911: invalid character的解决办法

    在Mybatis中,字符串通常需要使用双引号("")包裹,而不是单引号。同时,确保所有的变量和参数都已正确占位,并且在调用时传递了正确的值。 在调试这类问题时,建议使用日志工具(如Log4j或Logback)记录SQL语句的...

    Java基础学习02.pdf

    3. **字符型**:`char`(16位,用于存储单个字符,如字母、数字或其他Unicode字符,用单引号括起,如`'A'`)。 4. **布尔型**:`boolean`(非数字,只能取`true`或`false`)。 在处理数据类型时,Java支持数据类型...

    PostgreSQL数据库对象名大小写敏感的解决方法

    尽管在MS SQL Server中双引号和单引号均可作为字符串常量的标识符,但在PostgreSQL中,双引号具有特殊意义——它们用于标识数据库对象名,而不能用于字符串常量。为了代码的一致性和避免潜在的混淆,始终推荐使用单...

    防止sql注入解决方案

    框架如Hibernate、MyBatis等在设计时已考虑了SQL注入问题,它们会自动处理预编译语句和参数绑定,减少开发者的安全顾虑。 6. **最小权限原则**: 数据库连接应使用具有最小权限的账户,这样即使发生SQL注入,攻击...

    面试题总结.docx

    - `#`:当使用`#`传递参数时,MyBatis会将参数视为字符串,并自动添加双引号。这种方式有助于防止SQL注入攻击。 - `$`:使用`$`时,MyBatis会将参数直接插入到SQL语句中,不添加任何额外字符。这种方式不安全,...

    Mabitis中的#与$符号区别及用法介绍

    2. 表名作为变量时使用`${}`:由于表名不能被包围在单引号中,否则会导致SQL语法错误,所以当表名作为动态参数时,必须使用`${}`。但是,这样做失去了预编译带来的安全性和性能优势,因此要谨慎处理。 三、SQL预...

    SQL SERVER 中构建执行动态SQL语句的方法

    注意加号前后单引号的边上应加空格,确保字符串连接正确。 - 使用变量存储完整SQL字符串,如 `DECLARE @s VARCHAR(1000)`,然后执行 `exec(@s)`。如果SQL字符串包含非ASCII字符(如中文),需要使用 `NVARCHAR` ...

    防御SQL注入的方法总结

    对用户输入进行过滤,去除或限制特定的字符或字符组合,如单引号、双引号、分号和--等,这些字符通常用于构造SQL注入攻击。 6. **最小权限原则**: 数据库连接应该使用具有最小权限的角色,仅能访问和操作应用...

Global site tag (gtag.js) - Google Analytics