1.占位符

1.1  含义:

在持久化框架中,为了将约束条件中的可变参数从sql中分离出来,在原有的参数位置使用特殊的标记来标记该位置,后期通过代码给sql传递参数(即实现sql与代码分离开)。这个特殊的标记被称为占位符。

1.2 优点:

1.2.1 防止sql注入,提高了安全性

1.2.2 对于只有参数不同的sql语句,只需要编译一次{以后会从缓存中获取}

1.3 形式:

占位符在持久化框架中的一般形式为:?。Mybatis为了更加方便的与参数列表进行映射,采用的形式为:#{参数名}

1.4 示例:

SELECT * FROM t_address t where t.id = #{id}
--等价于
SELECT * FROM t_address t where t.id = ?

1.5 注意:

占位符只能在约束条件中使用

--持久化框架中,不允许以下形式:
SELECT * FROM ? 
SELECT * FROM t_address order by ?  --mybatis中,不允许以下形式
SELECT * FROM #{tableName}
SELECT * FROM t_address order by #{orderBy}

2. 拼接符

2.1 背景:

由于占位符只能在sql语句的约束条件中使用,有时候sql语句需要其它的一些变量参数(非约束条件中)来控制,如:表名、排列顺序等。所以Mybatis使用了拼接符的概念

2.2 形式:${参数名}

2.3 示例:

SELECT * FROM ${tableName}

2.4 注意:

如果参数通过用户获取,则不能使用拼接符的形式【会发生sql注入,不安全】

3. 补充:

在进行预编译的时候,会用参数值直接替换${参数名},用?替换#{参数名}

4. sql注入

4.1 概念:

将sql语法里的一些组合,通过表单提交或页面请求注入到sql语句中,欺骗服务器执行恶意sql语句

4.2 示例:

String id = “1 or 1 = 1”;
String sql = “select * from t_address where id = ”+id;

4.2 防止sql注入的方法:

对于表单提交的数据,使用占位符的形式构建sql语句(占位符不识别参数的sql语法【作为普通字符串】)

String id = “1 or 1 = 1”
String sql = “select * from t_address where id = ?” //解析后: select * from t_address where id = ‘1 or 1 = 1’;

Mybatis之占位符与拼接符的更多相关文章

  1. mybatis的#{}占位符和${}拼接符的区别

    #{}占位符:占位 如果传入的是基本类型,那么#{}中的变量名称可以随意写 如果传入的参数是pojo类型,那么#{}中的变量名称必须是pojo中的属性.属性.属性- ${}拼接符:字符串原样拼接 如果 ...

  2. SQL注入、占位符拼接符

    一.什么是SQL注入 官方: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意 ...

  3. .NET 基础 一步步 一幕幕[运算符、占位符、转义符]

      运算符.占位符.转义符 好吧,在五局全胜之后,终于升到了三个钻,距离一个星星还有一大段距离,忽然想起来今天的博客还没写,果断坑队友,来写博客了....感觉以后还是每天更新一篇比较好.要不晚上就该熬 ...

  4. 命令拼接符 || && 区别

    &&   前面的命令执行成功,执行拼接符后面的命令. ||      前面的命令执行失败,执行拼接符后面的命令. 举例: (1)whoami && net user 真 ...

  5. (转载)SQL去除回车符,换行符,空格和水平制表符

    http://www.cnblogs.com/insus/p/4815336.html MS SQL去除回车符,换行符,空格和水平制表符,参考下面语句,一般情况是SQL接受富文本或是textarea的 ...

  6. SQL去除回车符,换行符,空格和水平制表符

    MS SQL去除回车符,换行符,空格和水平制表符,参考下面语句,一般情况是SQL接受富文本或是textarea的内容.在数据库接收到这些数据之后,还是对其做一些处理. ),),),''),' ','' ...

  7. sqlserver数据库 去除字段中空格,换行符,回车符(使用replace语句)

    SQL中可以使用Replace函数来对某个字段里的某些字符进行替换操作,语法如下: 语法 REPLACE ( original-string, search-string, replace-strin ...

  8. Java中各种(类、方法、属性)访问修饰符与修饰符的说明

    类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所 ...

  9. java的访问控制(包、访问修饰符、修饰符)

    一.     java的类包 编写好一个源程序后,首先要执行javac命令进行编译源文件,并生成与源文件同名后缀为“.class”的字节码文件(类文件),该类文件与源文件默认在同一个目录中.该类文件是 ...

随机推荐

  1. Confluence 6 编辑站点欢迎消息使用模板编辑器的小提示

    站点欢迎消息是一个模板而不是一个页面,所以你需要使用模板编辑器来对你的消息进行编辑. 你可以和在你 Confluence 中其他页面中一样,在站点欢迎消息模板中添加文本,连接和宏.但是添加图片的话会有 ...

  2. Android CTS Test

    什么是CTS测试?了解这个问题前,我们先来搜索了解一遍“Google GMS 认证”.GMS全称为GoogleMobile Service,即谷歌移动服务.说白了GMS其实就是一系列谷歌的应用集合.谷 ...

  3. 整合Flask中的目录结构

    一.SQLAlchemy-Utils 由于sqlalchemy中没有提供choice方法,所以借助SQLAlchemy-Utils组件提供的choice方法 import datetime from ...

  4. vue中引入css文件

    两种方式引入css文件,一种是直接在main.js中引入(也可以在其他的.vue文件中的<script></script>标签中),即下面这种写法: import 'eleme ...

  5. Python判断字符串是否xx开始或结尾

    判断是否xx开始 使用startswith 示例代码: String = "12345 上山打老虎" if str(String).startswith('1'): #判断Stri ...

  6. Play框架--初学笔记

    目录结构 web_app 根目录 | sbt SBT Unix 批处理脚本用于启动sbt-launch.jar | sbt.bat SBT Windows 批处理脚本用于启动sbt-launch.ja ...

  7. WPF:如何高速更新Model中的属性

    原文:[WPF/MVVM] How to deal with fast changing properties In this article, I will describe a problem w ...

  8. 删除Apache服务的命令

    转到\Apache24\bin目录下,使用cmd命令sc delete apache2.2

  9. python--使用队列结构来模拟共享打印机等候时间

    按书里的样例抄的. 可以看到,将打印速度由第分钟5页提高到10页之后, 每个学生提交打印任务到打印完成的时间明显缩短. =========================== 在计算机科学实验室里考虑 ...

  10. github协作开发遇到的问题

    1.十一来了,帝都不好买票,30号就调休一天回去了,项目还没搞完,紧张的不行,就自己和同事搞了一个github协作开发,由于是功能和公司项目不是很沾边,但是是自己的主要工作,就和同事协调了一下,搭建了 ...