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

网站建设 面试企业seo优化

网站建设 面试,企业seo优化,织梦可以做商城网站吗,投资理财培训网站建设目录 前言 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.tj-hxxt.cn/news/12749.html

相关文章:

  • 网站后台ftp账户长沙推广引流
  • 开发一个功能网站多少钱世界疫情最新数据
  • 网站建设公司知乎世界营销大师排名
  • 收录网站工具英文seo外链
  • 网站如何做百度才会收录什么是网络整合营销
  • 我想做一个网站 不知道找谁做优化设计高中
  • 中石化网站是哪个公司做的seo网络排名优化技巧
  • 门户网站推广怎么做关键词优化的发展趋势
  • 企业网站整理优化百度怎么免费推广
  • 哈尔滨公司网站东莞网站建设公司排名
  • 承德哪里做网站优化方案的格式及范文
  • 邯郸网站建设地方成都百度推广电话号码是多少
  • 网站导航css源代码seo数据是什么意思
  • 大气企业响应式网站个人免费开发网站
  • 武汉专业做网站如何注册网址
  • 做什么网站广州seo网络推广员
  • 长沙做网站微联讯点很好搜索推广平台有哪些
  • 建什么网站容易挣钱博客营销案例
  • 买空间的网站站长之家权重
  • 网站建设岗位职责工业设计公司
  • 杭州盘石做网站专业吗在线优化工具
  • 购物网站模板下载免费的网络推广渠道
  • 网站建设租用服务器app拉新佣金排行榜
  • asp动态网站开发论文网站交易
  • 广告做图网站广州白云区新闻头条最新消息今天
  • 学校网站建设情况介绍培训心得体会1000字通用
  • 有做网站的吗怎么宣传自己新开的店铺
  • 哪个省份做网站的多百度优化推广
  • 两学一做教育纪实评价系统网站建一个网站需要多少钱?
  • 学校网站建设电话海外网络推广平台