`

mybatis中的#和$的区别 .

 
阅读更多

来源:http://blog.csdn.net/kobi521/article/details/16941403

 

 

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注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。

 

 

 

那个模糊查询的时候输入查询条件为%或者_就会查询出来全部记录,这个问题还不知道咋解决~~~~(>_<)~~~~

select * from info_detail_preissue t
where t.info_title like '%/%%' escape '/'

分享到:
评论

相关推荐

    mybatis面试题#和$的区别.pdf

    mybatis面试题#和$的区别.pdf

    浅谈Mybatis #和$区别以及原理

    浅谈Mybatis #和$区别以及原理 Mybatis是一款流行的持久层框架,它提供了两个占位符:#和$,它们均用于参数化SQL语句,但是它们的作用和原理却有所不同,本文将详细介绍这两者的区别和原理。 #和$的区别 在...

    09参数处理、# 和 $ 的区别.md

    09参数处理、# 和 $ 的区别.md

    Mybatis下动态sql中##和$$的区别讲解

    Mybatis下动态sql中##和$$的区别讲解 Mybatis是一款流行的ORM框架,能够帮助开发者快速构建数据库交互应用程序。在Mybatis中,动态SQL是一种强大特性,能够根据不同的输入参数生成不同的SQL语句。在Mybatis中,使用...

    Mybatis中#{}和${}传参的区别及#和$的区别小结

    在MyBatis框架中,`#{}`和`${}`是两种不同的参数占位符,它们在处理传参时有着显著的差异,同时也关联到`#`和`$`的区别。理解这些差异对于编写安全且高效的SQL查询至关重要。 首先,`#{}`是MyBatis的预编译参数占位...

    浅谈mybatis中的#和$的区别

    在MyBatis中,`#`和`$`是用来动态构造SQL语句的占位符,它们的区别主要在于SQL预编译和防止SQL注入的能力。理解这两种符号的用法对于编写安全、高效的MyBatis映射文件至关重要。 1. `#`占位符: - `#`将传入的数据...

    Mybatis现学现用

    很全很全:并且有项目实例 例如:mybatis中的#和$的区别? 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111",...

    mybatis面试题 (1).docx

    #{...} 和 ${...} 的区别: #{…} 解释为 JDBC prepared statement 的一个参数标记。 而将 ${…} 解释为字符串替换,比如,我们不能在表名(table name)的位置使用参数标记,比如,我们不能在列名的位置使用参数...

    MyBatis 10道面试题和答案.docx

    在MyBatis中,#{...}和${...}的区别在于: - #{...}:MyBatis将其替换为预编译语句(PreparedStatement)的占位符,能有效防止SQL注入。 - ${...}:直接将内容替换为字符串,没有安全防护。 MyBatis的分页功能可以...

    关于MyBatis参数传入#{index}的问题的解决方案【源码】

    首先,让我们明确MyBatis中的#{index}与${index}的区别。#{index}是预编译的参数,它会将参数值转化为PreparedStatement的参数,有助于防止SQL注入。而${index}则是在SQL字符串中直接替换变量,不进行预编译,存在...

    ibatis中 $ 于 # 的 区别

    在ibatis(现称为MyBatis)框架中,$ 和 # 是两种不同的动态SQL元素标记,用于处理参数传递的问题。它们各自有着独特的功能和应用场景,对于理解这两者的差异是十分重要的,因为这会直接影响到查询效率以及SQL注入等...

    MyBatis中#{}和${}的区别详解

    在MyBatis框架中,`#{}`和`${}`是两种不同的占位符,它们各自有不同的用途和特性。了解它们的区别对于编写安全、高效的SQL语句至关重要。 首先,`#{}`是预编译参数的表示方式,它会被MyBatis转化为...

    《Mybatis应用技术》复习资料.doc

    #### 四、#{} 和 ${} 的区别 - **#{}**: 是预编译处理,将 SQL 中的 #{} 替换为 `?` 符号,并在执行 SQL 前通过 `PreparedStatement` 设置参数。这种方式可以有效防止 SQL 注入攻击。 - **${}**: 属于字符串替换,...

    java资源之Mybatis基础入门学习笔记,详细解析,适合新手,第二天进阶笔记

    首先,我们来了解一下 MyBatis 中的两种占位符 `${...}` 和 `#{...}` 的区别。`${...}` 是简单的字符串替换,它会将动态内容直接拼接到 SQL 语句中,可能导致 SQL 注入问题,降低系统安全性。而 `#{...}` 则是预编译...

    Mybatis之#{}与${}的区别使用详解

    Mybatis之#{}与${}的区别使用详解 Mybatis是一款流行的持久层框架,它提供了两种方式来从数据库中获取数据,即#{}和${}。这两种方式都可以用来从数据库中获取数据,但是它们有着不同的使用场景和优缺点。 #{}的...

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

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

    Mybatis中SQL语句的编写.pdf

    ### MyBatis中SQL语句的编写 #### 一、概述 在MyBatis框架中,SQL语句的...通过以上内容的学习,可以更好地理解和掌握在MyBatis中编写SQL语句的方法和技巧。这些知识点对于开发高效稳定的MyBatis应用程序非常重要。

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

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

    MyBatis 36道面试题和答案.docx

    MyBatis和Hibernate的主要区别在于灵活性和自动化程度。MyBatis提供了更多对SQL的控制,开发者可以编写复杂的SQL,但需要手动处理关联对象的加载。而Hibernate则提供了一种更全面的对象关系映射解决方案,自动管理...

Global site tag (gtag.js) - Google Analytics