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

微博html5版seo网站优化专员

微博html5版,seo网站优化专员,万网 wordpress,网站asp模板#{}:预编译SQL。 ${}: 即时SQL。 当用户发送一条SQL语句给服务器后,大致流程如下: 1.解析SQL语句的语法和语义,校验SQL语句是否正确。 2.优化SQL语句,制定执行计划。 3.编译SQL语句。 4.执行SQL并返回结果。 一…

#{}:预编译SQL。

${}: 即时SQL。

当用户发送一条SQL语句给服务器后,大致流程如下:

1.解析SQL语句的语法和语义,校验SQL语句是否正确。

2.优化SQL语句,制定执行计划。

3.编译SQL语句。

4.执行SQL并返回结果。

一个SQL如果是上述流程,我们称之为即时SQL。

#{}的优点:

1.性能更高

在大多数情况下,某一天SQL会被反复执行,或者每次执行只是个别的值不同,如果每次都要将上述几步全部走完,效率就会比较低。

预编译SQL就是编译一次之后就会将编译后的SQL语句缓存起来(不执行1,2,3步了),后面再次执行这条SQL语句时,就不会再次编译,从而提高了性能。

*2.更安全(防止SQL注入)

这是#{}最主要的一个优点。

SQL注入:是通过操作输入的数据来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。

关于SQL注入,首先需要明白的是${}是将参数直接拼接到SQL语句后的,也就是没有“”,而#{}是在执行 SQL 时,MyBatis 会把#{}替换成?,再使用预编译语句(PreparedStatement)给?赋值。这样能有效防止 SQL 注入攻击,因为参数会被当作一个整体来处理,会自动对特殊字符进行转义。

例如:使用#{}时

<select id="queryUserByusername" resultType="com.example.mybatisxml.Model.UserInfo">select id,age,username,password from user_info by #{username}</select>

实际上执行的是:

SELECT * FROM user——info WHERE username = ?

然后再将输入的参数赋值给?

使用${}时:

<select id="queryUserByusername" resultType="com.example.mybatisxml.Model.UserInfo">select id,age,username,password from user_info where username = ${username}</select>

输入参数“zhangsan”,运行结果报错,其中一句提示是这样的:

可以看出${}是将zhangsan直接拼接到了 = 的后面,这也意味着可以通过写“‘’;drop database****;”这类语句来攻击服务器,因为服务器会将后面的drop database ****;识别为一句SQL语句。

${}应用的场景:

1.排序功能

对于SQL语句:select id, username from user_info order by id #{sort}.

List<UserInfo> queryUserBySort(String sort)

如果我们传入参数“asc”,IDEA就会报错,因为#{sort}会给asc自动添加引号,从而导致SQL错误。(因为参数类型为String,会自动加上引号)。

除此之外,如果将表名作为参数时,也会加上引号。

2.like查询

如果使用#{}:

 <select id="queryUserlike" resultType="com.example.mybatisxml.Model.UserInfo">select id,age,username,password from user_info where username like '%#{username}%'</select>List<UserInfo> queryUserlike(String username);

会报个这样的错误:

但是使用${}的话,则正常运行:

但是MySql内置了一个函数concat()来处理:

 <select id="queryUserlike2" resultType="com.example.mybatisxml.Model.UserInfo">select id,age,username,password from user_info where username like concat('%',    #{username},'%')</select>List<UserInfo> queryUserlike2(String username);

运行结果:


总结来说,当参数类型为String且不需要‘’的时候,使用${},不过需要注意SQL注入问题。

http://www.dtcms.com/wzjs/365620.html

相关文章:

  • 做网站 用哪种软文推广代理平台
  • 泉州服装网站建设百度网址导航
  • 自己做团购网站怎么样seo业务培训
  • 宁波中科网站建设有限公司护肤品软文推广
  • 白城市网站建设百度seo公司兴田德润
  • 建站之星官方网站朋友圈广告代理商官网
  • 深圳网站建设技术中央广播电视总台
  • 公司网站做的太难看口碑营销案例有哪些
  • 专门做国外家具书籍的网站电商营销推广方案
  • 网站内容避免被采集外包公司的优势和劣势
  • 绥芬河市建设局网站中国搜索引擎
  • 动态网站开发2017_2018东莞网站建设市场
  • 大气学校网站模板深圳百度关键词
  • 建设工程造价信息网官网北京网站优化指导
  • 做网站环境配置遇到的问题爱链工具
  • 做网页的网站叫什么技术培训机构排名前十
  • 怎么做网页版手机版网站网址导航怎样推广
  • wordpress在本地安装关键词seo优化公司
  • 网站菜单代码最新疫情最新数据
  • 辽宁网站建设公司外包公司被辞退有补偿吗
  • 腾讯云服务器搭建WordPress搜索引擎优化的方法有哪些?
  • 郑州哪些公司做网站建设苏州网站seo服务
  • 去哪儿网站上做民宿需要材料账户竞价托管费用
  • 专业地推团队seo有哪些作用
  • 网站建设的维护与更新自助友链平台
  • 一个做任务赚钱的网站整站优化系统厂家
  • 汕尾建设网站首页游戏推广员每天做什么
  • 用js做的网站营销qq官网
  • html做游戏网站google官方下载安装
  • 网站流程优化企业网络营销系统分析报告