在mybatis中#{}和${}的区别

2022-12-07,

文章目录

1、第一个#{}
2、第二个${}
3、区别

1、第一个#{}

解释:

使用#{}格式的语法在mybatis中使用preparement语句来安全的设置值

 PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1,id);

举列子:

执行sql语句:select * from user where name = #{username}
参数:username :xiaowang
解析后执行的sql语句:select * from user where name = ?

#方式能够很大程度上防止sql注入

2、第二个${}

解释

有时你只想直接在SQL中插入一个不改变的字符串,$将传入的数据直接显示生成在sql中

       Statament st =conn.createStatement();
ResultSet rs = st.executeSuery(sql);

举列子:
执行sql语句:select * from user where name = ${username}
参数:username= xiaoming
解析后执行的SQL语句:select * from user where name = xiaoming

sql注入的实际例子

select id from users where username = '"+username +"' and password = '"这里的username和password从前台获取,假如未对传入的数据进行验证,用户输入的是or 1= 1,执行的sql变成select id from users where username = '' or 1=1-- and password = '随便输入',由于1=1 是正确的,则直接不执行后边的验证。就离谱

3、区别

#方式能够很大程度防止sql注入,$无法防止sql注入

$方式一般用于传入数据库对象
使用$要么不允许用户输入这些字段,要么进行转义并检验
能用#就不用$

在mybatis中#{}和${}的区别的相关教程结束。

《在mybatis中#{}和${}的区别.doc》

下载本文的Word格式文档,以方便收藏与打印。