mybatis里面的#和$之间的区别

mybatis中有两个常见的符号#$,在进行变量的赋值的时候是很常见的,我的理解就是#是需要进行编译的,是字符串进行编译之后在放入到sql中,如果不是单纯的字符串替换,而$是直接进行字符串的替换工作,两者各有有缺点。

一、#

我们一般在刚刚接触到mybatis的时候都是使用的是#{变量名字},来进行sql语句的赋值工作,比如 select * from table_name where name = #{name},来进行查询,在接口里面传入Map或者是String都是可以的,这样的是mybatis进行了语句的编译工作,#{name},必须要放到name=后面,这样才会编译通过,进行执行sql语句

二、$

然而有的时候我们需要进行变化传输sql语句,这个时候一般都会用到的是<if>等mybatis里面的动态标签来动态拼接sql语句,但是有的时候根据一些业务场景是需要传输表名或者是特定的变量名的,这个时候就需要根据业务来动态的改变查询的表名等问题,这个时候$的好处就体现了,$我的感觉就是单纯的字符串替换,比如,select * from table_name where name = ${name}这个时候mybatis不需要编译而是直接进行字符串的替换工作,比如我要传入一个表名,select * from ${tableName} where name = #{name},这个时候在前台就需要传输map来进行传参或者是entity(自己建立的数据库表里面的实体的别名),前面的${tableName}就是单纯的字符串替换,而#{name}则需要进行编译才可以赋值

三、#和$之间的取舍

根据我的经验,一般还是使用#,因为#是比较安全的一种传输方式,在一些渗透和安全性校验的时候,$不是特别安全,容易引起sql的注入问题,导致毁灭性灾难,但是也不是说一点不能用,只能说不可以从前台传输有关于sql的语句来使用$否则就会出现删除数据的问题,所以请大家慎重使用。

猜你喜欢

转载自blog.csdn.net/qq_34237136/article/details/83781290