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. SWift中 '?' must be followed by a call, member lookup, or subscript 错误解决方案

    那是因为你在使用自己写的分类时没有指定返回的数据类型  指定下返回数据类型就好了 我是用的oc写的分类在Swift中使用的 错误代码 private lazy var btn = UIButton.C ...

  2. nginx官方模块之http_sub_module

    作用 http内容替换 语法 示例 html代码与结果如下:

  3. Linux之man命令详解及中文汉化

    使用方法 Linux man中的man就是manual的缩写,用来查看系统中自带的各种参考手册 使用方法: man command 示例: [root@VM_0_13_centos ~]# man l ...

  4. Python安装、卸载第三方模块

    pip command ModuleName command:用于指定要执行的命令(install:安装,uninstall:卸载) ModuleName:需要安装的模块名称 示例: 安装第三方模块n ...

  5. linux下的抓包

    1. 查看网卡名字 cat /proc/net/dev 2.抓取外网进来的包 tcpdump -i eth0 port -s -w .pcap 3.抓取自己服务器上的两个程序之间访问的数据 换成 lo ...

  6. ajax----发送异步请求的步骤

    1)获取(创建)Ajax对象:获取XMLHttpRequest对象2)创建请求:调用xhr的open方法3)在发送请求之前需要设置回调函数:绑定指定xhr的onreadystatechange事件4) ...

  7. SSM + Android 网络文件上传下载

    SSM + Android 网络交互的那些事 2016年12月14日 17:58:36 ssm做为后台与android交互,相信只要是了解过的人都知道一些基本的数据交互,向json,对象,map的交互 ...

  8. map reduce程序示例

    map reduce程序示例 package test2; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop. ...

  9. 【C++ Primer | 07】常用算法

    第一部分 常用泛型算法: find(beg, end, val); equal(beg1, end1, beg2); fill(beg, end, val); fill_n(beg, cnt, val ...

  10. Nginx 提示host not found in upstream 错误解决方法

      Nginx DNS resolver配置实例,本文讲解在proxy_pass 和 upstream server 通信的时候需要手动指定 resolver,本文就给出了配置实例. nginx 通过 ...