MyBatis动态SQL标签

1、if

通常用于WHERE语句中,通过判断参数值来决定是否使用某个查询条件

2、choose(when,otherwise)

按顺序判断其内部when标签中的test条件是否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行otherwise中的sql。

如果说 if 标签是与(and)的关系,那么 choose 是或(or)的关系。

3、trim(修剪)

该标签中有四个属性:prefix,prefixOverrides,suffix,suffixOverrides

可以在包含的内容前加上某些前缀,也可以在其后加上某些后缀,与之对应的属性是prefix和suffix。

可以把包含内容的首部某些内容覆盖,也可以把尾部的某些内容覆盖(即忽略掉),对应的属性是prefixOverrides和suffixOverrides(只有这两个属 性的情况下),如果这两个属性设置的值不是包含内容的前缀或者尾部的话,那么这个属性不起作用。

如果同时设置了prefix以及prefixOverrides,那么prefix的值会覆盖掉首部prefixOverrides的内容(另外一对同理)。

正因为trim有这样的功能,所以我们也可以非常简单的利用trim来代替where元素的功能。

4、where

用于简化sql语句中where条件判断的书写

在使用if标签而不使用where标签下的条件查询情况下,如果条件没有一个能匹配上,那么生成的sql语句就会变成:

SELECT * FROM test
WHERE

要知道多个条件之间是要用and或者or来连接的,如果第一个不匹配但是第二个之后的匹配的话,那么那么生成的sql语句就会变成:

SELECT * FROM test
WHERE
AND name = 'mori'

where 标签知道只有在一个以上的if条件有值的情况下才去插入“WHERE”子句。而且会把最后第一个条件成立的and或者是or给忽略掉。

5、set

一般将其用在update的sql语句中。

生成update语句时若使用if标签,如果前面的if没有执行,则可能导致有多余逗号的错误,使用set标签可以剔除追加到条件末尾的任何不相关的逗号 

6、foreach

当传递一个 List 实例或者数组作为参数对象传给 MyBatis,MyBatis 会自动将它包装在一个 Map 中,用名称作为键:

List 实例将会以“list”作为键,而数组实例将会以“array”作为键。

https://blog.csdn.net/m0_37204491/article/details/71436872

我好菜呀
原文地址:https://www.cnblogs.com/LinsenLi/p/9606946.html