动态sql是mybatics的主要特征之一,在mapper中定义的参数传到xml中之后,在查询之前mybatics会对其进行动态解析。
mybatics为我们提供了两种支持动态sql的语法:#{}以及${}。
#{}和${}在预编译中的处理是不一样的。#{}在预处理时,会把参数部门用一个占位符?代替,而${}直接以字符串代替。
#{}的参数替换发生在DBMS中,而${}则发生在动态解析过程中。${}方式会引发sql注入的问题,同时也会影响sql语句的预编译,所以从安全性和性能的角度出发,能使用#{}的情况下就不要使用${}。