MyBatis:动态SQL续上一个
MyBatis入参为数组的foreach迭代
foreach的基本用法和属性:foreach主要用在构建in条件中,它可以在SQL与句中迭代一个组合一个集合。 他的主要属性有关数据:
item:表示集合中每一个元素进行迭代时的别名。
index:指定一个名称,用于表示在迭代过程中,每次迭代到的位置(此处省略,未指定)。
collection:最关键并最容易出错的属性,需格外注意,该属性必须指定,不同情况下,该属性的值是不一样的,主要有三种情况:
1.若参数为单参数且参数类型是一个List的时候,collection的属性值为list。
2.若参数为单参数且参数类型是一个数组的时候,collection的属性值为array(此处传 入参数Integer[] roleIds为数组类型,此处collection的属性设为“array”)。
3.若参数为多参数,就需要把他们封装为一个Map进行处理。
separator:表示在每次迭代以什么符号作为分隔符(既然是in条件语句,所以必然是以“,”作为分隔符)。
close:表示该语句以什么结束(既然是in条件语句,所以必然是以“)”结束)。
open:表示该语句以什么开始(既然是in条件语句,所以必然是以“(”开始)。
1.但参数List类型
映射文件:
上述对应的是mapper是这样的:
测试代码为:
2.单参数array数组类型:
映射文件是:
上述对应的是mapper是这样的:
对应的测试代码:
MyBatis入参文Map类型的foreach
该类型的映射文件应该是:
上述对应的是mapper是这样的:
对应的测试代码是:
使用Mybatis增加数据:
1.首先,在接口中使用@param注释,显式指定集合参数类的别名(列表和数组有默认的别名list和array),如图:
在对应的映射文件对应的map文件key进行迭代,如图:
测试类应该编写为,如图:
MyBatis中的动态SQL总结:
MyBatis在SQL映射文件中可以灵活运用,只能的动态SQL实现SQL映射。
if+set:完成更新操作。
if+where:完成多条件查询。
if+trim:完成多条件查询(代替where)或者更新操作(代替set)。
choose(when , otherwise):完成条件查询(多条件下,选择其一)。
froeach:完成复杂查询,主要用于in条件查询中,迭代集合。其中最关键的部分就是 collection属性,根 据不同的入参类型,该属性值亦不同:
(1): 若入参对象为一个List实例,collection属性值为list。
(2): 若入参对象为一个数组,collection属性值为array。
(3): 若入参对象为多个,就需要把他们封装为一个Map进行处理。