MyBatis获取参数值的两种方式#{}和${} 以及 获取参数值的各种情况

54 阅读1分钟

MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在MyBatis中,获取参数值主要有两种方式,分别是#{}和${}。

首先,我们来看看#{}。这是一种预编译的方式,MyBatis会将#{}中的内容解析为一个占位符,即?。当SQL语句执行时,MyBatis会通过JDBC的PreparedStatement的参数设置方法,如setString、setInt等,将参数值替换到占位符的位置上。这种方式可以有效防止SQL注入攻击,因为用户输入的参数值不会直接拼接到SQL语句中,而是作为参数传入,由JDBC驱动进行安全处理。此外,#{}还可以用于复杂类型的参数获取,如JavaBean、Map等。

然后,我们来看看{}。与#{}不同,{}是直接将参数值拼接到SQL语句中的。这种方式下,MyBatis不会对参数值进行任何处理,直接将其拼接到SQL语句中。因此,如果参数值来自用户输入,使用可能会导致SQL注入攻击。但是,{}可能会导致SQL注入攻击。但是,{}有其独特的用途,例如动态表名、列名等场景,因为这些场景下,参数值需要直接作为SQL语句的一部分,不能使用预编译的方式。

接下来,我们再来看看在不同情况下获取参数值的方式。

  1. 单个参数:无论是简单类型还是JavaBean,都可以直接使用#{}或${}获取参数值。例如,#{id}、#{user.name}。
  2. 多个参数:MyBatis会将多个参数封装为一个Map,其中key为param1、param2等,value为参数值。我们可以通过#{param1}、#{param2}等方式获取参数值。如果我们想使用自定义的key,可以在方法参数前加上@Param注解,例如@Param("id") int id,然后可以通过#{id}获取参数值。
  3. List或数组:MyBatis也会将List或数组封装为一个Map,其中key为array或list,value为List或数组。我们可以通过#{array[0]}、#{list[0]}等方式获取参数值。同样,如果我们想使用自定义的key,可以在方法参数前加上@Param注解。
  4. Map:如果参数是一个Map,我们可以通过#{key}的方式获取参数值。
  5. 的使用:如前所述,{}的使用:如前所述,{}主要用于动态表名、列名等场景。例如,select * from ${tableName}。

总的来说,MyBatis的#{}和提供了灵活的参数获取方式,可以满足不同的需求。但是,我们在使用时需要注意其安全性问题,尽量避免使用{}提供了灵活的参数获取方式,可以满足不同的需求。但是,我们在使用时需要注意其安全性问题,尽量避免使用{}来获取用户输入的参数值。

蓝易云-五网CN2服务器【点我购买】

蓝易云采用KVM高性能架构,稳定可靠,安全无忧!
蓝易云服务器真实CN2回国线路,不伪造,只做高质量海外服务器。


海外免备案云服务器链接:www.tsyvps.com

蓝易云香港五网CN2 GIA/GT精品网络服务器。拒绝绕路,拒绝不稳定。