1.动态SQL是MyBatis的一个强大特性,基于OGNL的表达式,可是我们方便的在SQL语句中 实现某些逻辑。
2.动态SQL的元素如下:
- if:利用if实现简单的条件选择。
- choose(when,otherwise):相当于Java中的switch语句,通常与when和otherwise搭配。
- where:简化SQL语句中的where条件判断。 if+where实现多条件查询
- set:解决动态更新语句,它的主要功能和where元素差不多,主要是在包含的语句前输出一个set,若包含的语句是与逗号结束的,会自动把逗号忽略掉。
- trim:可以灵活的去除多余的关键字。 if+trim实现多条件查询
- foreach:迭代一个集合,通常用于in条件。
3.在MyBatis中除了使用if+where实现多条件查询,还有一个更为灵活的元素trim可以替代之前的做法。trim元素也会自动识别其标签内是否有返回值,
若有返回值,会在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀,也可以把包含内容的首部某些内容覆盖(即忽略),或者把尾部的某些内容覆盖。
4.trim的属性:
- prefix:前缀,作用是通过自动识别是否有返回值后,在trim包含的内容上加上前缀。
- suffix:后缀,作用是在trim包含的内容上加上后缀。
- prefixOverrides:对于trim包含内容的首部进行指定内容的忽略。
- suffixOverrides:对于包含内容的首尾部进行内容的忽略。
5.使用foreach完成复杂查询
- MyBatis入参为数组类型的foreach迭代
- MyBatis入参为List类型的foreach迭代
- MyBatis入参为Map类型的foreach迭代
6.foreach基本属性:
- item:表示集合中每一个元素迭代是的别名。
- index:指定一个名称,用于表示在迭代过程中,每次迭代的位置。
- open:表示该语句以什么开始。
- separator:表示在每次进行迭代之间以什么符号作为分隔符。
- close:表示该语句以什么结束。
- collection:最关键并最容易出错的属性,需格外注意,该属性必须指定,不同情况下该属性值是不一样的。主要有三种情况:
- 若入参为单参数且参数类型是一个List的时候,collection属性值为list。
- 若入参为单参数且参数类型是一个数组的时候,collection属性值为array。
- 若传入参数为多参数,就需要把他们的封装为一个Map进行处理。
7.MyBatis接收的参数类型:基本类型、对象、List、数组、Map。
8.无论MyBatis的入参是哪种参数类型,MyBatis都会将参数放在一个Map中,对于单参入参类型的情况:
- 若入参为基本类型:变量名作为key,变量值为value,此时生成的Map自由一个元素。
- 若入参为对象:对象的属性名作为key,属性值为value。
- 若入参为List:默认“list‘’作为key,该List即为value。
- 若入参为数组:默认“array”作为key,该数组即为value。
- 若入参为Map:键值不变。