那个视频网站好,如何在电子商务化平台上做企业网站推广,葛亚曦设计公司官网,《网站建设 补充合同#是预处理而$是直接替换
Mybatis在处理#{}时#xff0c;会将SQL中的#{}替换成占位符#xff1f;#xff0c;再使用preparedStatement的set方法来赋值。而Mybatis在处理 时#xff0c;是将 {}时#xff0c;是将 时#xff0c;是将{}直接替换成变量的值 我们分别使用#{}和…
#是预处理而$是直接替换
Mybatis在处理#{}时会将SQL中的#{}替换成占位符再使用preparedStatement的set方法来赋值。而Mybatis在处理 时是将 {}时是将 时是将{}直接替换成变量的值 我们分别使用#{}和${}来查询userinfo表中名字叫admin的人 Mapper
public interface UserMapper {Userinfo selectByName(Param(username) String username);
}?xml version1.0 encodingUTF-8?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.example.demo.mapper.UserMapperselect idselectByName resultTypecom.example.demo.entity.Userinfoselect * from userinfo where username#{username}/select
/mapper使用单元测试
Test
void selectByName() {String name admin;Userinfo userinfo userMapper.selectByName(name);System.out.println(用户信息 userinfo);
}将#{}变成${}
${}存在sql注入的风险
例如登入场景需要输入用户名和密码如果使用${}就存在sql注入的风险。什么是sql注入SQL注入应用程序对用户输入数据的合法性没有判断或者过滤不严攻击者利用SQL语法拼接上一些特殊的sql语句欺骗MySQL执行一些非授权的任意查询。最经典的sql注入就是 or 11
select idlogin resultTypecom.example.demo.entity.Userinfoselect * from userinfo whereusername${username} and password ${password}
/select得到的结果如下也就是使用${}通过直接替换到sql语句中是直接当作SQL语句的一部分替换进去的是依据SQL语法可以实现拆分使用而使用#{}通过占位符把传进去的参数当作一个整体使用。
${}的使用场景
在开发中大部分是使用#{}但存在即合理。当我们传递的参数是SQL关键字时使用${}。例如淘宝中价格从高到低需要传递参数desc,此时不能使用#{}不然会将desc认为是string类型。 注意在使用${}时传过来的参数一定是可枚举的要经过检查才能使用