在mybatis操作数据库的时候,往往会出现参数获取不到,或者报异常的问题
- #{ } 和 ${ } 的区别
(1) ${ } :底层其实是statement,必须是使用 “字符串拼接” 的方式操作sql,所以,一定要注意 “单引号” 的使用。并且,不会防止 “sql注入”
(2) #{ }:底层是preparedStatement,可以使用 “通配符” 操作sql,可以自动添加 “单引号”,不需要注意单引号问题。可以防止 “sql注入”。
- 获取参数的区别
(1) 如果传进的参数是 string、基本数据类型 或者是 对应的包装类。
#{ } : 可以通过 “任何的名字” 进行数据的获取
${ } :只能使用 “value” 、“_parameter” 来获取
(2) 如果传进的是javabean
两者 : 都可以通过 “属性名” 直接获取属性值。
${ }:需要注意 “单引号” 问题。
(3) 如果传进的是多个参数
mybatis会将这些参数放在map集合中,所以,获取有两种方法。
第一种:通过下标。0、1、2、3…
第二种:通过param1、param2、param3…
也可以使用在接口中@param(value ="") 进行一个参数的指定
${ }:需要注意 “单引号” 问题。
(4) 如果存进的是List、Array
mybatis会自动将List、Array放在map中。
List:以list为键;Array:以array为键
(5) 如果存进的是 map参数
两者都可以通过 “键的名称” 直接获取值,
${} : 需要注意单引号。