sql语法 MyBatis <foreach> 标签详解
是 MyBatis 中用于遍历集合/数组的动态 SQL 标签常用于 IN 查询、批量插入等场景。foreach collectionarrayitemitemopen(separator,close)#{item}/foreach属性说明示例值collection要遍历的集合/数组的名称array、list、collitem循环中每个元素的变量名item、idopen遍历结果前添加的字符(separator元素之间的分隔符,close遍历结果后添加的字符)生成的 SQL 示例假设传入的数组是 [1, 2, 3](1,2,3)完整用法SELECT*FROMuserWHEREidINforeach collectionarrayitemidopen(separator,close)#{id}/foreachSELECT*FROMuserWHEREidIN(1,2,3)collectioncollection 的值取决于传入参数的类型单个数组参数ListUserselectByIds(Integer[]ids);foreach collectionarrayitemid.../foreach单个 List 参数ListUserselectByIds(ListIntegerids);foreach collectionlistitemid.../foreach使用 Param 注解命名ListUserselectByIds(Param(idList)ListIntegerids);foreach collectionidListitemid.../foreach情况collection怎么写单个List参数无Param写list单个数组参数无Param写array有Param(xxx)写xxx必须和注解里的名字一致如果传入的是一个对象非集合publicclass SearchCondition { private ListLongids;private String name;// getter/setter}ListUserselectByCondition(Param(condition)SearchCondition condition);!-- 遍历对象内部的集合属性用 对象名.属性名 --SELECT*FROMuserWHEREidINforeach collectioncondition.idsitemidopen(separator,close)#{id}/foreach对象内部包含集合属性, 这个属性一定要是集合(List,Array) 其他的不能使用foreach传入参数类型collection怎么写能否用foreachListlist或Param指定的名字✅ 可以数组array或Param指定的名字✅ 可以对象含集合属性对象名.集合属性名✅ 可以遍历内部集合普通对象无集合属性—❌ 不能用直接#{对象.属性}