动态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()命名别名,否则会报错

posted @ 2020-10-19 19:56  wangssd  阅读(2566)  评论(0编辑  收藏  举报