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’;

转载于:https://www.cnblogs.com/BlueStarWei/p/9385320.html

Mybatis之占位符与拼接符相关推荐

  1. 7 MyBatis映射文件中的拼接符

    7.1 占位符: 占位符的值插入到SQL中时,会自动以单引号包裹内容. 格式: #{拼接符名} 7.2 拼接符: 拼接负责的值插入到SQL中时,只是作为命令的拼接,不做其他处理 格式: ${拼接符名} ...

  2. 【Mybatis】占位符#{}和${}的区别

      #{}是占位符,${}是拼接符. #{}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为ord ...

  3. 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取文件中的文本行 | 查询文本行数据 | 追加文件数据 | 使用占位符方式拼接字符串 )

    文章目录 一.逐行遍历文件文本数据 1.获取文件中的文本行 2.查询文本行数据 3.追加文件数据 4.使用占位符方式拼接字符串 二.完整代码示例 一.逐行遍历文件文本数据 1.获取文件中的文本行 调用 ...

  4. MyBatis -- 参数占位符 #{} 和 ${}

    MyBatis -- 参数占位符 #{} 和 ${} 一.准备工作 二.参数占位符 #{} 和 ${} 三.特殊场景 3.1 特殊场景 1 -- String 3.1.1 使用 #{} 3.1.2 使 ...

  5. MyBatis——谈谈占位符(#、$)的理解与使用

    文章目录: 1.#占位符 1.1 #占位符的特点 1.2 使用 #{ } 对数据库执行 update 操作 2.$占位符 2.1 $占位符的特点 2.2 使用 ${ } 对数据库执行 select 操 ...

  6. 批量删除-获取页面id-字符串拼接做法

    批量删除-获取页面id-字符串拼接做法 做法思路 首先来说说思路,肯定是先在前端页面获取选中的复选框的数组,这是第一步,然后这里我想的是将数组直接拼接成字符串,将字符串传值给我后台已经做好的单个删除的 ...

  7. html取消转义符,HTML转义符

    .NET 基础 一步步 一幕幕[运算符.占位符.转义符] 运算符.占位符.转义符 好吧,在五局全胜之后,终于升到了三个钻,距离一个星星还有一大段距离,忽然想起来今天的博客还没写,果断坑队友,来写博客了 ...

  8. 乾坤符和鸿蒙符,少年三国志四种暗金兵符技能怎么样 四种暗金兵符技能分析...

    兵符系统中不同颜色的兵符给角色助阵的属性值都不相同,红色兵符.金色兵符.暗金兵符,今天我们就来看一下几种暗金兵符的技能都是怎样的吧. [鸿蒙符] 鸿蒙符的混沌破势技能,使得佩戴的武将能在一定条件下驱散 ...

  9. 32 usb 配置描述符_USB协议详解第4讲(USB描述符标准配置描述符)

    关注+星标公众号,不错过精彩内容 编排 | 一个早起的程序员 一个早起的程序员 1 USB描述符USB描述符有设备描述符.标准配置描述符.接口描述符.端点描述符.字符串描述符,HID设备有HID描述符 ...

最新文章

  1. mysql使用参数指定用户_mysql-用户账号及权限管理
  2. 安卓APP_ Fragment(2)—— Activity与Fragment的通信
  3. Mysql学习总结(6)——MySql之ALTER命令用法详细解读
  4. 【java读书笔记】——java开篇宏观把控 + HelloWorld
  5. iOS之中国银联移动支付控件升级的问题
  6. 110道 Redis面试题及答案 (持续更新)
  7. 码农的奋斗之路 富爸爸穷爸爸系列--提高你的财商 读后感
  8. 网页形式的php抓取文件,PHP 抓取网页源文件
  9. 八戒帮扶V5微信公众平台任务系统完美运营v1.5.8
  10. 苹果app旧版本软件下载
  11. ZOJ 3789 Gears
  12. 360email讲堂:中秋佳节邮件营销大放光彩
  13. 工银亚洲银联卡到手!
  14. IEEE trans模板格式中的分栏及左下角作者信息脚注的添加方法(Word 2010)
  15. Java 8 流过滤List
  16. uva 714 Copying Books(二分法求最大值最小化)
  17. [附源码]计算机毕业设计Python作业查重系统(程序+源码+LW文档)
  18. CUDA编程——cudaHostAlloc
  19. 虹科方案 | 视频和广播专业人士的存储和存档解决方案
  20. mysql 同步设置密码_mySQL数据同步设置

热门文章

  1. Codeforces 1480B. The Great Hero(阅读模拟题,注意数据范围和攻击顺序)
  2. php mysql 安装错误_Apache+php配置 Mysql安装出错解决办法
  3. 解释afterPropertiesSet
  4. 搜索插入位置—leetcode35
  5. obfuscator-llvm Theos 集成配置
  6. 禁止Dockpanel拖动
  7. 数据结构之:链表详解
  8. 锐捷服务器虚拟化技术_数据中心边缘虚拟交换(IEEE 802.1Qbg)技术白皮书
  9. mongodb 搜索速度_初识 MongoDB 数据库
  10. Spring Web Service 学习之Hello World篇