动态SQL

喜你入骨 提交于 2019-11-25 19:53:47

3.1 使用动态SQL完成多条件查询

用于实现动态SQL的元素如下:
 if:利用if实现简单的条件选择。
 choose(when,otherwise):相当于Java中的switch语句,通常与when和otherwise搭配。
 where:简化SQL语句中where的条件判断。
 set:解决动态更新语句。
 trim:可以灵活地去除多余的关键字。
 foreach:迭代一个集合,通常用于in条件。

3.1.3 使用if+trim实现多条件查询

trim元素也会自动识别其标签内是否有返回值,若有返回值,会在自己包含的内容前加上某些前缀,也可在其后加上某些后缀,与之对应的属性是prefixOverrides和suffixOverrides;
trim属性:
 prefix:前缀,作用是通过自动识别是否有返回值后,在trim包含的内容上加上前缀,如此处where。
 suffix:后缀,作用是在trim包含的内容上加上后缀。
 prefixOverrides:对于trim包含内容的首部进行指定内容(如此处的“and | or”)的忽略。
 suffixOverrides:对于trim包含内容的首尾进行指定内容的忽略。

3.2 使用动态SQL实现更新操作

3.2.1 使用if+set

set元素主要用于更新操作,它的主要功能和where元素差不多,主要是在包含的语句前输出一个set,若包含的语句是以逗号结束的,会自动把该逗号忽略掉,再配合if元素就可以动态地更新需要修改的字段;而不需修改的字段,则可以不再被更新。

3.3 使用foreach完成复杂查询

foreach的基本属性:
 item:表示集合中每一个元素进行迭代时的别名。
 index:指定一个名词,用于表示在迭代过程中,每次迭代到的位置。
 open:表示该语句以什么开始(既然是in条件语句,所以必然是以“(”开始)。
 separator:表示在每次进行迭代之间以什么符号作为分隔符(既然是in条件语句,所以必然是“,”作为分隔符)。
 close:表示该语句以什么结束(既然是in条件语句,所以必然是以“)”结束)。
 collection:最关键并最容易出错的属性,需格外注意,该属性必须指定,不同情况下,该属性的值是不一样的。主要有三种情况:
 若入参为单参数且参数类型是一个List的时候,collection属性值为list。
 若入参为单参数且参数类型是一个数组的时候,collection属性值为array(此处传入参数Integer[] roleIds为数组类型,故此处collection属性值为“array”)。
 若传入参数为多参数,就需要把它们封装为一个Map进行处理。
小结:
(1) MyBatis接收的参数类型:基本类型、对象、List、数组、Map。
(2) 无论MyBatis的入参是哪种参数类型,MyBatis都会将参数放在一个Map中,对于单参入参的情况:
 若入参为基本类型:变量名作为key,变量值为value,此时生成的Map只有一个元素。
 若入参为对象:对象的属性名作为key,属性值为value。
 若入参为List:默认“list”作为key,该list即为value。
 若入参为数组:默认“array”作为key,该数组即为value。
 若入参为Map:键值不变。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!