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:最关键并最容易出错的属性,需格外注意,该属性必须指定,不同情况下该属性值是不一样的。主要有三种情况:
  1. 若入参为单参数且参数类型是一个List的时候,collection属性值为list。
  2. 若入参为单参数且参数类型是一个数组的时候,collection属性值为array。
  3. 若传入参数为多参数,就需要把他们的封装为一个Map进行处理。

7.MyBatis接收的参数类型:基本类型、对象、List、数组、Map。

8.无论MyBatis的入参是哪种参数类型,MyBatis都会将参数放在一个Map中,对于单参入参类型的情况:

  • 若入参为基本类型:变量名作为key,变量值为value,此时生成的Map自由一个元素。
  • 若入参为对象:对象的属性名作为key,属性值为value。
  • 若入参为List:默认“list‘’作为key,该List即为value。
  • 若入参为数组:默认“array”作为key,该数组即为value。
  • 若入参为Map:键值不变。