1、#在很大程度上可以避免字符串拼接的SQL注入。
2、$在SQL中是取String类型的字符串,直接显示在SQL中;#以字符串的显示出现在SQL中;
eg: select *from student where id = ${ID} => select *from student where id = 2;
select *from student where id = #{ID} => select *from student where id = ‘’2‘。
在应用中遇到的坑:
我是几个月前,应公司转型的需要,在老大画的巨饼下从C开发转向了Java应用。开始了Java的探索之旅~~~~
由于是生手,mybatis也是不熟悉,也就在大佬眼里最简单的mybatis的使用中到了坑。
在一个查询API中,程序将查询的字段和where条件拼装成String类型字符串,用注解的方式将其传到mapper.xml中,刚开始我用的是 #{sql_field}、#{sql_where}
分别获取SQL的字段、where条件,测试的时候,查询结果total一直为0。由于是一对多联合查询,我一个是写xml配置文件时resultMap写的有问题,将一对多
改为单表查询。total结果还是0。
最后,无意见想起了公司架构大佬提过类似“SQL注入值mybatis$、#”的话题,想起的取值还不一样。用 ${sql_field}、${sql_where}获取SQL的字段、where条件。
debug>>调试,能够完美的获取到值。