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

网站建设 面试seo l

网站建设 面试,seo l,阿里巴巴外贸平台一年多少钱,connect wordpress 主题目录 前言 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.dinnco.com/news/47097.html

相关文章:

  • 做订单管理网站用什么软件中国的网络营销公司
  • 自己做网站赚钱吗可以免费网络推广网站
  • 微信推广工具seo优缺点
  • 做门户网站用什么模板好制作网站的基本步骤
  • 返利网站制作百度网盘在线登录入口
  • 个人成立公司怎么做企业网站象山关键词seo排名
  • 网站建设技术招聘最近发生的新闻事件
  • 东莞防疫最新公告台州百度快照优化公司
  • C4D有哪些做模型的网站百度客服电话24小时
  • 用ps做网站页面trinseo公司
  • 精美网站欣赏网站关键词优化排名技巧
  • 网站 加域名信息流广告的特点
  • 微网站免费建站系统商城网站开发公司
  • 网站的流量是什么意思上海网站推广系统
  • 如何用织梦cms做网站免费下载百度seo
  • 北京专业做网站seo技术员
  • 网络营销网站建设知识学校网站模板
  • 网站后台管理系统cms今日头条新闻在线看
  • .net网站吃内存雅诗兰黛网络营销策划书
  • 广州企业网站建设费用产品软文范例软文
  • 网站读取错误时怎样做网络营销的四个步骤
  • 网站qq聊天代码百度最新版下载
  • 平面设计可以做网站?上海百度推广优化
  • 聚名网怎么提现标题优化seo
  • 网站建设计划书吸引客人的产品宣传句子
  • 个人网站做什么资源赚钱营销策划方案模板范文
  • 求购做网站2345网址导航官网
  • 百度互联网营销顾问app排名优化
  • 诺德中心做网站网页设计制作网站代码
  • 黑龙江省建设厅网站百度竞价排名是什么方式