当前位置: 首页 > news >正文

建设银行公积金预约网站首页鲜花网站建设项目概述

建设银行公积金预约网站首页,鲜花网站建设项目概述,泰安网络犯罪案件,西丽网站建设设计目录 前言 1、处理参数的方式不同 2、${}的优点 3、SQL注入问题 4、like查询问题 前言 #{}和${}都可以在MyBatis中用来动态地接收参数,但二者在本质上还是有很大的区别。 1、处理参数的方式不同 ${} :预编译处理 MyBatis在处理#{}时&#xff0c…

目录

前言

1、处理参数的方式不同

2、${}的优点

3、SQL注入问题

4、like查询问题


前言

#{}和${}都可以在MyBatis中用来动态地接收参数,但二者在本质上还是有很大的区别。

1、处理参数的方式不同

${} :预编译处理

MyBatis在处理#{}时,会将SQL语句中的#{}替换为?,即占位符,然后使用PreparedStatement的set方法来赋值。

代码示例:

    <select id="getUserByID" resultType="com.example.demo.model.UserInfo">select * from userinfo where id=#{id}</select>

查看程序运行期间MyBatis打印的日志:

#{} :直接替换

MyBatis在处理${}时,会直接将SQL语句中的${}替换为参数的值。

代码示例:

    <select id="getUserByID" resultType="com.example.demo.model.UserInfo">select * from userinfo where id=${id}</select>

查看程序运行期间MyBatis打印的日志:

使用${}接收int类型的参数时是不会报错的,但是用来接收String类型的参数时代码就会报错:

代码示例:

    <!-- 根据用户名查询用户信息 --><select id="getUserByName" resultType="com.example.demo.model.UserInfo">select * from userinfo where username=${name}</select>

查看程序运行期间MyBatis打印的日志:

 "orange"是userinfo表中的一个用户名,在查询时需要加上单引号才能查询成功:

2、${}的优点

使用${}可以实现对查询结果的动态排序(升序/降序);而使用#{}则不能实现,如果传递的参数是String类型,#{}会对参数加单引号,就会出现SQL语句错误。

代码示例:

    <!-- 查询所有用户并排序 --><select id="getAll" resultType="com.example.demo.model.UserInfo">select * from userinfo order by ${order}</select>

如果使用#{}时,最终的SQL语句为:select * from userinfo order by id 'desc'

3、SQL注入问题

由于${}是直接替换参数,不会给参数添加单引号,因此会导致SQL语句错误,如果非要使用${},就需要手动对参数添加单引号:

但这样又会带来SQL注入的问题:

代码示例:

    <!-- 登录功能 --><select id="login" resultType="com.example.demo.model.UserInfo">select * from userinfo where username='${username}' and password='${password}'</select>

传入参数:"' or 1 = '1"

表中用户的正确用户名和密码:

查询结果:

而使用#{}就不会出现SQL注入的问题:

 

结论:能使用#{}就使用#{}!如果非要使用${},那么一定要进行参数校验。

4、like查询问题

在进行like查询时,使用#{}会报错:

代码示例:

    <select id="getUserByLike" resultType="com.example.demo.model.UserInfo">select * from userinfo where username like '%#{msg}%'</select>

此时最终的SQL语句为: select * from userinfo where username like '%‘a'’%'

而使用${}时,虽然可以达到目的,成功查询到数据,但是${}会有SQL注入问题,使用时需要进行参数校验,而用户输入的内容则是多种多样的,我们无法全部校验。

为了解决这个问题,就需要使用MySQL的内置函数concat()来处理:

    <select id="getUserByLike" resultType="com.example.demo.model.UserInfo">select * from userinfo where username like concat('%',#{msg},'%')</select>

http://www.yayakq.cn/news/156/

相关文章:

  • 院校网站建设网站设计与制作说明书
  • 做网站的属于什么专业?深圳市住建局官网入口
  • 中国网站制作公司排名厦门网站制作费用明细
  • 企业网站建设需了解什么安卓免费翻外墙的app
  • 医疗网站不备案深圳市前十的互联网推广公司
  • 手机网站制作教程下载梅州兴宁网站建设培训
  • 网站内容的创新大气学校网站
  • dede免费网站模板下载wordpress内部服务器
  • 主机屋 建网站教程网址生成软件
  • 优惠券网站怎么做代理优购物官方网站 商城
  • 手机网站按那个尺寸做中国建设银行网站上不去
  • 哪种网站名称容易通过备案审核电子商务网站建设案例教程
  • 石家庄市制作网站公司廊坊哪里做网站好
  • 成都网站建设公司官网网站开发税收标准
  • 网站里宣传视频怎么做寮步网站仿做
  • 视频网站怎么做排名世界上最有趣的网站
  • 新兴街做网站公司电商培训类网站模板
  • 与网络公司洽谈做网站需要注意什么企业官网制作报价
  • 域名注册网站系统python做网站好吗
  • 商洛网站建设哪家好热力图 wordpress
  • 网站制作培训价格怎么在拼多多开网店
  • 跨境电商网站建设主管岗位职责国内最大的软件开发商
  • 彩票网站开发风险wordpress怎么登
  • 网站制作教学兰州网站建设公司有哪些
  • 新郑龙湖网站建设成功案例网站建设
  • 购物节优惠卷网站怎么做怎么优化推广自己的网站
  • 单页网站cpa虚拟主机天元建设集团有限公司本科生待遇
  • 电子商城建设网站博客网站如何设计
  • 汉源网站建设wordpress 更换logo
  • 网站建设公司有哪些重要职务中国八冶建设集团网站