概述
转载:https://blog.csdn.net/ideality_hunter/article/details/80623526
https://blog.csdn.net/weixin_42323802/article/details/82425111
2018年09月05日 15:47:53 打豆豆。 阅读数:1061 标签: #{}和${} #{} ${} 更多
个人分类: mybatis
版权声明:本站所提供的文章资讯、软件资源、素材源码等内容均为本作者提供、网友推荐、互联网整理而来(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考,如有侵犯您的版权,请联系我,本作者将在三个工作日内改正。 https://blog.csdn.net/weixin_42323802/article/details/82425111
在mybatis的 mapper.xml中,首先说下使用场景:
#{ } :#代表占位符,用来传递参数;
${ } :$用来拼接sql 语句的;譬如:把数据库中的表名作为参数拼接在 sql 语句中,必须使用 $
mapper接口;
-
//@Param 注解的作用如下
-
//mapper接口中 ,给String tableName参数 起个名字叫tableName1
-
// 这样mapper.xml 中 #{tableName1} 和${tableName1}可以拿到参数 tableName 的值
-
public List<User> findUserByTableName(@Param("tableName1") String tableName);
mapper.xml 配置文件中添加 sql 语句;
-
<select id="findUserByTableName" resultType="User">
-
<!--SELECT * from #{tableName1} 运行会报错,编译后sql语句中含有引号,sql语句错误-->
-
SELECT * from ${tableName1}
-
</select>
#{ }和${ } 区别如下:
1、#是预编译的方式,$是直接拼接;
2、#不需要关注数据类型,mybatis实现自动数据类型转换;$不做数据类型转换,需要自行判断数据类型;
3、#可以防止sql注入;$不能防止sql注入;
4、如果 parameterType 只有一个参数,默认情况下,#{ }中可以写任意的名字;${ }中只能用value来接收。
-
<!-- #{}代表占位符?,表示mybatis框架会接收输入的参数并赋值到sql语句当中
-
关于简单类型(int,String,date。long)可以使用value来代表参数名
-
-->
-
<select id="findUserById" parameterType="java.lang.Integer" resultType="model.User">
-
select * from user where id=#{id}
-
</select>
-
<!--模糊查询 like +条件 '% ${匹配的内容} %' $是-->
-
<select id="findUserByName" parameterType="String" resultType="model.User">
-
select * from user where name like '%${value}%';
sql注入,一个例子让你知道什么是sql注入
2018年06月08日 17:10:14 Ideality_hunter 阅读数:12469
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ideality_hunter/article/details/80623526
sql注入,一个例子让你知道什么是sql注入
这篇文章说的非常好
https://www.cnblogs.com/sdya/p/4568548.html
我就是按照文中例子,亲自在我之前用final框架做的项目中,操作了一遍,的确是实现了用户登录。
在不知道用户名和密码的情况下实现了用户登录
重现sql注入过程如下:
1、在用户名输入' or 1=1 --,然后随便输入一个密码
2、点击登录,我竟然登录进去系统了。
为什么呢?
debug一下源代码,就不难知道原因。
点击登录,得到的sql语句是:
select * from AUTH_USER t where t.LOG_IN_NAME='' or 1=1 --' and t.PASSWORD='gdd'
放入oracle去执行:
返回了所有的用户信息,这样authUser就肯定不是null了,表示数据库有相关用户,当然就算是登录成功了。
果不其然成功进入了系统界面,这样用户就算是登录了,虽然是一个随机的一个用户,但是该用户的操作他都可以干,甚至如果知道框架的action地址,那么在浏览器中输入功能的action的地址,他想干什么就干什么了。
最后
以上就是矮小唇膏为你收集整理的在mybatis中#{}和${}的区别,使用场景及sql注入转载:https://blog.csdn.net/ideality_hunter/article/details/80623526sql注入,一个例子让你知道什么是sql注入的全部内容,希望文章能够帮你解决在mybatis中#{}和${}的区别,使用场景及sql注入转载:https://blog.csdn.net/ideality_hunter/article/details/80623526sql注入,一个例子让你知道什么是sql注入所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复