1.对#与$两种动态占位符的解析
#{key}
#{key}作用是当输入参数时会明确参数的类型,而不是将其直接作为字符串使用
${key}
${key}中传入的参数会被转化为字符串使用,可能会导致注入攻击的问题.
什么时候要使用$呢?
因为#占位符只能替代"右值",即容器名(如表明,列名,关键字等),而不能替代"左值",如果想要实现"? =?",左边就需要使用$,右边需要使用#
2.{key}的命名规则
①简单类型与复杂类型的数据
简单数据类型为参数为仅有一个的数据,比如int,double,string…
复杂数据类型包括实体类型(对象),数组类型,集合类型等
②传入参数为单个简单类型
Mapper接口定义的函数规定了传入参数的类型,此时sql语句中使用到的{key}中的key可以随便写,因为参数只有一个,默认会进行对应.
③传入参数为实体类型
实体类型的数据为对象,此时{key}中的key的名字必须为对应的对象的属性名
④传入参数为多个简单类型
一共有两种方法:
->1.使用@Param注解
//在mapper接口中定义方法时,在形参列表中
...func(@Param("a")String name,@Param("b")int id)
即类似于给参数其别名,在使用时只能使用别名
->2.利用Mybatis的默认机制
原理类似于Mybatis为我们默认提供了两种别名
即param1,param2…分别对应第一个形参,第二个形参…
或arg0,arg1…也是分别对应第一个形参,第二个形参…
注意一共是从0开始,一个是从1开始
⑤传入参数为Map类型
{key}中的key只需要直接使用Map中自定义的的key名与Value名即可.