动态sql语句 入参中存在 数组 或 List
mybatis中入参存在 数组或List 时,使用foreach 进行动态拼接
foreach可以在SQL语句中迭代一个集合。它的属性主要有item、index、collection、separator、close、open
- item:表示集合中每一个元素进行迭代时的别名
- index:指定一个名称,用于表示在迭代过程中,每次迭代到的位置
- open:表示该语句以什么开始,in条件语句是以“(”开始
- separator:表示在每次迭代之间以什么符号作为分隔符,in条件语句以“,”作为分隔符
- close:表示该语句以什么结束,in条件语句是以“)”结束
- collection:该属性必需指定,不同情况下,该属性的值是不一样的
- 若入参为单参数且参数类型是一个List,collection属性值为list
- 若入参为单参数且参数类型是一个数组,collection属性值为array
- 若传入参数为多参数,就需要把它们封装为一个Map进行处理
- 若传入参数为多参数时,collection属性值为传入的列表名或数组名
<select id="getUserByRoleId_foreach_array" resultMap="userMapByRole"> select * from smbms_user where userRole in <foreach collection="array" item="roleIds" open="(" separator="," close=")"> #{roleIds} </foreach> </select>
注:mybatis在传入多个参数的时候,要用注解 @Param()命名别名,否则会报错