Mybatis 技巧集锦

MyBatis 中使用 #{} 代替 ${} 占位符传递参数

在Mapper层使@Select注解进行SQL语句查询时,往往需要进行参数传入和拼接,一般情况下使用两种占位符 #{}${}

两者的区别为:

  • #{} 是预编译处理,后台输出的日志会将SQL语句中的#{}占位符输出为?,将传入的Parameter传入SQL语句。

    • #{}传入参数后,会自动给参数加上’ '(引号)

  • ${} 是字符串硬替换,会直接将传入的参数直接替换${}占位符,不进行预处理。有SQL注入的风险。

    • ${}传入的参数会硬替换字符串,不会有其他处理

一般来说,更推荐使用 #{}

MyBatis 中使用标签来动态生成 SQL

mybatis 提供了 <if><where><trim><set><foreach> 等标签,用于动态生成 SQL。