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

小企业做网站选那种短期职业技能培训班

小企业做网站选那种,短期职业技能培训班,南昌市科协网站,wordpress外贸商店#{} 和 ${}区别 #{} 和 $ {},其最大的区别则是#{}方式能够很大程度防止sql注入(安全),${}方式无法防止Sql注入 sql注入: Sql注入指的是程序解析时会将你传入的参数作为原来SQL语句的一部分,打乱原来SQL的结构,而通常…

#{} 和 ${}区别

#{} 和 $ {},其最大的区别则是#{}方式能够很大程度防止sql注入(安全),${}方式无法防止Sql注入

sql注入:

Sql注入指的是程序解析时会将你传入的参数作为原来SQL语句的一部分,打乱原来SQL的结构,而通常我们只是需要传入一个参数而已.

#{} 预编译占位符

  1. #{}表示一个占位符号 相当于 jdbc中的 ? 符号
    #{}实现的是向prepareStatement中的预处理语句中设置参数值,sql语句中#{}表示一个占位符即?
  2. #{}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:
select * from user where id= #{user_id}
# 传入 3 
# 解析成sql
select * from user where id= where id="11"
  1. 如果sql语句中只有一个参数,此时参数名称可以随意定义,如果sql语句有多个参数,此时参数名称应该是与当前表关联实体类的属性名或则Map集合关键字,不能随便写,必须对应!

$ {} 字符串拼接

  1. $ {}将传入的数据直接显示生成在sql中。如:
select * from user where id= $ {user_id}
# 传入的值是 3 
# 解析成sql
select * from user where id= 3
  1. $ {value}中value值有限制只能写对应的value值不能随便写,因为${}不会自动进行jdbc类型转换

必须使用 ${} 场景

简单来说,在JDBC不支持使用占位符的地方,都可以使用${},比如动态指定表名,指定动态排序参数

  1. 表名或列名动态替换(表名 / 列名不能作为预编译参数)
<select id="getAllFromTable" resultType="map">SELECT * FROM ${tableName} WHERE status = 'active'
</select>

为什么不能若使用#{}:
原因:若使用#{} 会生成 SQL SELECT * FROM 'user_table' WHERE ...(引号导致语法错误)
2. SQL 片段拼接:如排序字段(ORDER BY)

<select id="getUsersOrderBy" resultType="User">SELECT * FROM users ORDER BY ${sortField} ${sortOrder}
</select>

为什么不能若使用#{}:
原因:若使用#{}:会生成 SQL ORDER BY 'username' ASC(引号导致排序失败)

  1. 原生 SQL 函数参数:如日期格式化函数
<select id="getUsersByDate" resultType="User">SELECT * FROM users WHERE create_time LIKE '${formattedDate}%'
</select>

LIKE模糊查询

永远不要在 LIKE 语句中直接使用 ${} 拼接通配符
使用 ${} 模糊查询

<select id="searchUsers" resultType="User">SELECT * FROM users WHERE username LIKE '%${keyword}%'
</select>
# 用户输入 ' OR '1'='1
# SQL 将变为
SELECT * FROM users WHERE username LIKE '%' OR '1'='1%' # 此时条件恒为真

优先方案:Java 端拼接 % + #{}。

// Java代码
String keyword = "%" + searchTerm + "%";
userMapper.searchUsers(keyword);
// XML映射
<select id="searchUsers" resultType="User">SELECT * FROM users WHERE username LIKE #{keyword}
</select>

替代方案: 标签 + #{}。

<select id="searchUsers" resultType="User"><bind name="pattern" value="'%' + keyword + '%'" />SELECT * FROM users WHERE username LIKE #{pattern}
</select>

性能差异

#{} 利用预编译缓存,批量插入 或 更新时性能更优。
${} 每次需重新解析 SQL,频繁调用时可能影响性能。

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

相关文章:

  • 手机上哪个网站推广普通话奋进新征程
  • google网站提交入口网站首页布局设计模板
  • java 网站制作网络优化工程师前景
  • 手机端h5网站模板下载seo公司是什么意思
  • 免费申请网站域名网络推广策划
  • 青海最好的网站建设公司企业为何选择网站推广外包?
  • 公司做网站注意事项推广代理登录页面
  • 资阳网站建设优化网站怎么做
  • 还有哪些行业可以做垂直网站进一步优化营商环境
  • 广州代做网站百度关键词seo外包
  • 自己做团购网站怎么样google seo 优化招聘
  • 音乐网站模板免费源码上海网站seo诊断
  • wordpress 成功案例外贸seo网站
  • 怎么向google提交网站竞价托管开户
  • wordpress 问卷调查插件2022年搜索引擎优化指南
  • 建设快卡额度查询网站百度一下官网首页登录
  • 宿迁房产网二手房什么公司适合做seo优化
  • 个人网站 限制百度知道
  • 网站快速优化排名软件企业网站seo案例
  • 如何在jsp上做网站页面网站推广的方式和方法
  • 湛江网站制作推荐网络优化工程师是做什么的
  • 甘肃网站怎样备案微信公众号推广
  • 做婚礼策划的网站济南网站万词优化
  • 四川建设网网站成都网站建设公司
  • 网站专题制作 公司搜索引擎排名谷歌
  • 成都彩票网站建设b站推广引流最佳方法
  • 威海网站建设哪家的好提升seo排名平台
  • 有哪些档案网站外链在线发布工具
  • 做鸡网站青岛疫情最新情况
  • 常州网站建设常州申请网址怎么申请的