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

九江网站推广徽hyhyk1怎么开网店

九江网站推广徽hyhyk1,怎么开网店,深圳做电商平台网站,31省今天全国疫情最新消息#{}:预编译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.cadmedia.cn/news/3689.html

相关文章:

  • 品牌网站设计制作哪家正规成都网站建设
  • 网站设计制作新报价丈哥seo博客工具
  • app运营推广策划方案关键词优化排名软件哪家好
  • 崇礼做网站的公司页面优化的方法有哪些
  • 方又圆网站建设单页面网站如何优化
  • 如何制作漂亮的微信公众号文章seo关键词优化价格
  • 高端网站开发建设杭州seo公司
  • 海口房地产网站建设班级优化大师怎么加入班级
  • 北京网站优化快速排名seo sem推广
  • wordpress 热门文章搜索seo优化
  • 网站建设设计制网站注册免费
  • 重庆秀山网站建设费用seo优化的价格
  • 互联网站建设维护需要做什么西安计算机培训机构哪个最好
  • 成都活动轨迹优化教程网
  • 汕头网站搭建阿里巴巴官网首页
  • 东莞seo优化关键词排名上饶seo博客
  • 长沙网站改版免费网站推广网站短视频
  • 中国最大网站建设公司网络营销怎么做?
  • 建筑工程网校排行榜seo管理是什么
  • 百度新闻百度搜索关键词排名人工优化
  • 莱芜金点子电子版搜狗seo软件
  • web网站百度不收录吗百度关键字优化价格
  • 经营网站需要注意什么营销方案的几个要素
  • 免费论坛建站谷歌官网注册入口
  • 网站建设的公司选择哪家好百度云网页版登录入口
  • 淘宝网站建设的优点优化师是干嘛的
  • 东莞智通人才网最新招聘武汉seo网站
  • 巫溪县城乡建设委员会网站厦门seo厦门起梦
  • 深圳注册公司去哪里注册培训seo去哪家机构最好
  • 北京丰台住房和城乡建设委员会网站网络推广和网站推广平台