`
hucj
  • 浏览: 8634 次
社区版块
存档分类
最新评论

Mybatis中#与$的区别(转)

阅读更多

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".
  
2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id,  如果传入的值是id,则解析成的sql为order by id.
  
3. #方式能够很大程度防止sql注入。
  
4.$方式无法防止Sql注入。

5.$方式一般用于传入数据库对象,例如传入表名.
  
6.一般能用#的就别用$.


MyBatis排序时使用order by 动态参数时需要注意,用$而不是#


字符串替换
默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用:
ORDER BY ${columnName}
这里MyBatis不会修改或转义字符串。

重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。

分享到:
评论

相关推荐

    MyBatis中#号与美元符号的区别

    在MyBatis框架中,#号和美元符号($)在动态SQL中的使用有着显著的区别,这些差异直接影响到SQL语句的预编译、类型匹配以及安全性。 首先,#{}是MyBatis的预编译占位符。当使用#{变量名}时,MyBatis会进行预编译处理...

    Mybatis中#{}与${}的区别详解

    Mybatis中#{}与${}的区别详解 Mybatis 中的 #{} 与 ${} 是两个不同的占位符号,用于实现动态 SQL,两者的主要区别在于防止 SQL 注入的能力。#{} 能够很大程度防止 SQL 注入,而 ${} 方式无法防止 SQL 注入。 #{} ...

    ibatis中 $ 于 # 的 区别

    ### ibatis中 $ 与 # 的区别 在ibatis(现称为MyBatis)框架中,$ 和 # 是两种不同的动态SQL元素标记,用于处理参数传递的问题。它们各自有着独特的功能和应用场景,对于理解这两者的差异是十分重要的,因为这会...

    MyBatis 中 ${}和 #{}的正确使用方法(千万不要乱用)

    在MyBatis框架中,${} 和 #{} 是两种不同的参数占位符,它们的使用方式和作用有明显的区别,对于SQL语句的安全性和效率有着重要影响。 1. #{} #{} 是预编译处理的方式,也被称为参数绑定或者预处理。在处理 #{ } ...

    myBatis和ibatis的区别

    ### myBatis与ibatis的区别 #### 一、概述 myBatis与ibatis是两款在Java领域中非常流行的持久层框架,它们均基于SQL映射机制,为开发者提供了便捷的方式来处理数据库操作。两者间的关系密切,ibatis是myBatis的...

    mybatis_01 入门配置 Dao的两种开发方法

    ### MyBatis 入门配置与 DAO 的两种开发方法 #### 一、JDBC 开发问题及 MyBatis 概览 ##### JDBC 开发常见问题 - **频繁创建与释放数据库连接**: 这可能导致资源浪费并影响系统性能。在企业级项目中,通常采用连接...

    mybatis和mybatis plus比较详解

    本文旨在深入探讨MyBatis与MyBatis Plus这两种流行持久层框架之间的区别、各自的优缺点及其适用场景。通过细致的对比分析,帮助开发者更好地理解这两种框架的特点,从而为自己的项目选择最适合的持久层解决方案。 #...

    mybatis老师总结

    #### 五、MyBatis 与 Hibernate 的区别 - **MyBatis**:不完全是一个 ORM 框架,需要程序员自己编写 SQL 语句。MyBatis 提供了 XML 或注解方式来配置 SQL 语句,并将 Java 对象和 SQL 语句映射生成最终执行的 SQL。...

    mybatis笔记

    - MyBatis 支持 JDBC 类型与 Java 类型之间的映射,可以通过 `<resultMap>` 中的 `jdbcType` 属性指定。 #### 十、ResultMap 的使用 - 当查询结果字段名与 Java POJO 类属性名不一致时,需要使用 `<resultMap>` ...

    MyBatis使用与实现.pdf

    ### MyBatis 使用与实现详解 #### 一、MyBatis 概述 **MyBatis** 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis ...

    mybatis返回Integer

    首先,我们要理解Java中的基本类型int和引用类型Integer的区别。int是Java的基本数据类型,它占用32位存储空间,直接存储数值,而Integer是int的包装类,是一个对象,它包含一个int类型的成员变量。在Java中,对象的...

    mybatis的讲课笔记, 包含mybatis的缓存,配置等

    MyBatis中的 ${} 和 #{} 的区别 MyBatis 在预编译 SQL 时会区分使用 `${}` 和 `#{}`。`#{}` 是预编译处理,可以有效防止 SQL 注入,它会把参数部分当做一个整体,以参数传入的形式进行处理,比如使用预编译的 `...

    MyBatis中使用$和#所遇到的问题及解决办法

    1. #{}与${}的区别: - #{ }:这是MyBatis中的预编译参数标记,它会将参数转化为PreparedStatement的参数占位符,类似于Java中的`?`。当MyBatis遇到`#{ }`时,它会将参数值转化为PreparedStatement的参数,这样...

    Mybatis面试题(含答案).pdf

    Mapper 接口的工作原理是 JDK 动态代理,Mybatis 运行时会使用 JDK 动态代理为 Dao 接口生成代理对象,代理对象会拦截接口方法,转而执行 MappedStatement 所代表的 sql,然后将 sql 执行结果返回。 3. Mybatis 的...

    MyBatis案例

    通过XML或注解的方式配置SQL语句,MyBatis可以将Java对象与数据库表中的记录进行映射,实现了数据的透明化操作。 2. **配置文件** MyBatis的配置文件通常命名为`mybatis-config.xml`,它包含了MyBatis的全局配置,...

    传播智客-mybatis课堂笔记(2天)

    6. 参数映射与结果映射:MyBatis支持多种参数映射方式,如#{}和${}的区别,以及使用Java类型处理器进行复杂类型的处理。结果映射则涉及自动类型转换和自定义映射规则,笔记会详细解释这些机制。 7. 动态SQL:...

    Mybatis中SQL语句的编写.pdf

    ### MyBatis中SQL语句的编写 #### 一、概述 在MyBatis框架中,SQL语句的编写是一项核心任务。MyBatis作为一款优秀的持久层框架,支持多种方式来定义SQL语句,包括XML配置文件和注解等方式。本文档主要介绍在XML配置...

    MyBatis 36道面试题和答案.docx

    MyBatis与Hibernate的主要区别在于灵活性和控制程度。MyBatis需要开发者编写SQL,提供了更高的定制性,但需要更多的手动工作。而Hibernate则提供了一套完整的对象关系映射解决方案,自动管理数据库交互,但在某些...

    做的一个工程的Mybatis例子

    Mybatis 是一款流行的Java持久层框架,它简化了数据库操作,通过XML或注解的方式将SQL与Java代码绑定,提供了一种更为灵活的SQL映射机制。本项目实例是一个使用Mybatis实现的“VacationManage”系统,旨在帮助理解...

Global site tag (gtag.js) - Google Analytics