Mybatis支持两种取值方式——占位符#与拼接符$。
占位符 #
#{parameter name}:取单个普通类型、POJO类型、多个参数、集合类型。
ADV(优点):使用PreparedStatement对象进行SQL预编译,安全。拼接符{parameter name}:取单个普通类型、POJO类型、多个参数、集合类型。{_parameter}, _parameter是Mybatis的内置参数。
DisADV(缺点):由于是字符串拼接的方式,因此存在SQL注入的风险。前后台得做好SQL注入工作。底层使用的是Statement对象处理SQL。
- 原则
可以使用占位符的场景不使用拼接符。原生JDBC不支持占位符的地方可以使用拼接符代替。如表名,列名动态拼接。