mybatis中$#的区别是什么?有什么区别?

KLQ 2020-04-29 14:05:52 java常见问答 4039

在Java面试题当中,mybatis中$和#的区别是什么也是经常会出现的问题,那么个面试题的答案是什么呢?下面一起来了解一下吧!

一、mybatis中$和#的区别

1、#相当于对数据加上双引号

2、$相当于直接显示数据

3、#将传入的数据都当做是一个字符串,它会对自动传入的数据加一个双引号。

例:

order by #user_id#

假如,传入的值是111,则解析成sql时的值为order by "111", 假如,传入的值是id,那么解析成的sql为order by "id"。

4、$将传入的数据直接显示生成在sql当中

例:

order by $user_id$,假如传入的值是111,则解析成sql时的值为order by user_id, 假如,传入的值是id,那么解析成的sql为order by id。

5、$方式不能够防止Sql注入

6、#方式可以很大程度的防止sql注入

7、$方式一般多用于传入数据库对象

例:

传入表名

8、#{} 的参数替换是发生在DBMS当中, ${} 是发生在动态解析过程中

也就是:select * from user where name = #{name}

#{}在预编译的时候参数部分用一个占位符 ? 代替

例:

select * from user where name = ?

${}在动态解析的时候直接简单替换参数

例:select * from user where name = xxx

MyBatis排序的时候使用order by动态参数的时候,要注意一下了,用的是$,不是#

以上就是对于mybatis当中,$和#的区别介绍了,你都了解到了吗?

更多java相关问题回答,可以继续关注奇Q工具网的java常见问答专栏了解哦,里面有很多的java面试题问题相关回答呢,希望可以帮助大家呢!