MyBatis之#{} and ${}
#{} 和 ${} 之间最大的差别就是 #{}会在使用的时候被加上 ‘’ 引号, ${}直接传值,不做任何处理
1.#{}对传入的参数会做预编译,也就是会当做字符串来处理
select * from info where name = #{name}
比如传递 博客园,得到的结果就是如下
select * from info where name = '博客园'
2.${}对传入的参数不会做任何的处理,也就是说传递什么就是什么
select * from info where name = ${name]
比如传递 博客园 得到的结果就是如下
select * from info where name = 博客园
3.#{} 最大的好处就是可以很大程度上防止SQL注入(SQL Injection),然而${}则不具备这样的功能
比如我们在做用户登录的场景
使用#{}
select * from user where userCode = #{userCode} and userPwd = #{userPwd}
前台传递:userCode = 123 userPwd = 123 or 1 = 1
后台解析后,MyBatis首先会对SQL语句的参数用 ‘?’做预编译处理
select * from user where userCode = ? and userPwd = ?;
最终效果:
select * from user where userCode = '' and userPwd = '123 or 1 = 1';
这样就可以有效的防止了sql的注入效果 使用${}
select * from user where userCode = ${userCode} and userPwd = ${userPwd}
前台传递:userCode = 123 userPwd = 123 or 1 = 1
后台解析后,MyBatis会直接把值传递给sql,不做任何的处理!
最终效果:
select * from user where userCode = 123 and userPwd = 123 or 1 = 1;
不仅可能导致语法错误!而且更严重的会对导致用户恶意注入sql获取信息,或者做其它恶意操作!!非常危险!
4.说了这么多#{}的好处,好像${}被遗弃的婴儿一样(委屈),但是${}也是有很大作用的!如下:
比如我们在直接想用SQL语句插入一条原封不动的参数的时候,如order by我们的${}就派上用场了()
select * from info order by ${name}
重点:SQL注入是非常可怕的!!!(搞不好被罚工资或者直接牢底坐穿)!一定要注意使用场景!
MyBatis之#{} and ${}的更多相关文章
- 【分享】标准springMVC+mybatis项目maven搭建最精简教程
文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...
- Java MyBatis 插入数据库返回主键
最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...
- [原创]mybatis中整合ehcache缓存框架的使用
mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...
- 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程
本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...
- mybatis plugins实现项目【全局】读写分离
在之前的文章中讲述过数据库主从同步和通过注解来为部分方法切换数据源实现读写分离 注解实现读写分离: http://www.cnblogs.com/xiaochangwei/p/4961807.html ...
- MyBatis基础入门--知识点总结
对原生态jdbc程序的问题总结 下面是一个传统的jdbc连接oracle数据库的标准代码: public static void main(String[] args) throws Exceptio ...
- Mybatis XML配置
Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...
- MyBatis源码分析(一)开篇
源码学习的好处不用多说,Mybatis源码量少.逻辑简单,将写个系列文章来学习. SqlSession Mybatis的使用入口位于org.apache.ibatis.session包中的SqlSes ...
- (整理)MyBatis入门教程(一)
本文转载: http://www.cnblogs.com/hellokitty1/p/5216025.html#3591383 本人文笔不行,根据上面博客内容引导,自己整理了一些东西 首先给大家推荐几 ...
- MyBatis6:MyBatis集成Spring事物管理(下篇)
前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...
随机推荐
- Maxon Cinema 4D Studio R20.026 中文破解版下载
Maxon Cinema 4D Studio,是 Maxon 公司开发的一款专业三维工具包,如果你需要一个得力助手,轻松快速创建令人称赞的 3D 图形作品,那么这是你的最佳选择. 为何使用Cinema ...
- 2019.6.21 NOIP2018提高组模拟题(二)
1.咒语 (curse.pas/c/cpp) [题目描述] 亮亮梦到自己来到了魔法城堡,但一扇巨大的石门阻拦了他通向城堡内的路.正当他沮丧之际,突然发现门上有一处机关,机关上有一张很长的纸条.亮亮拿起 ...
- Bzoj 3654 图样图森波 题解
3654: 图样图森破 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 123 Solved: 66[Submit][Status][Discuss] ...
- error: 'commit' is not possible because you have unmerged files.
解决方案: 1.把修改的文件add下,如:git add bidder_mod/src/common/dragon_bidder_data.cc2.git commit
- kali换源
在/tec/apt/sources.list加入以下内容 #中科大更新源 deb https://mirrors.ustc.edu.cn/kali kali-rolling main non-free ...
- Django自带的后台管理系统
1.准备工作: 1-1.创建django项目和应用 1-2.修改settings.py配置文件: #应用配置: INSTALLED_APPS = [ 'django.contrib.admin', ' ...
- 科密指纹考勤机B329采集
昨天项目用到了科密指纹考勤机B329. 暂记录下碰到的问题,及其解决办法,以备查询. 1.下载科密的二次开发包SDK“10079” .地址:( http://pan.baidu.com/s/1i39m ...
- 调用百度API进行文本纠错
毕设做的是文本纠错方面,然后今天进组见研究生导师 .老师对我做的东西蛮感兴趣.然后介绍自己现在做的一些项目,其中有个模块需要有用到文本纠错功能. 要求1:有多人同时在线编辑文档,然后文档功能有类似Wo ...
- [03] HEVD 内核漏洞之UAF
作者:huity出处:https://www.cnblogs.com/huity35/p/11240997.html版权:本文版权归作者所有.文章在博客园.个人博客同时发布.转载:欢迎转载,但未经作者 ...
- django中ORM的model对象和querryset 简单解析
欢迎大家查看我的博客,我会不定时的用大白话发一些看了就能懂的文章,大家多多支持!如您对此文章内容有独特见解,欢迎与笔者练习一起探讨学习!原创文创!转载请注明出处! ORM是干嘛的? 介绍orm之前我应 ...