Foreach se usa principalmente en la construcción en condiciones, puede iterar sobre una colección en declaraciones SQL. Los atributos del elemento foreach incluyen principalmente elemento, índice, colección, abierto, separador y cierre. El elemento representa el alias cuando se itera cada elemento en la colección. El índice especifica un nombre para representar la posición a la que se alcanza cada iteración durante el proceso de iteración. Open representa lo que comienza con la declaración, el separador representa qué símbolos se usan como separadores entre cada iteración, y Close representa lo que termina. Lo más crítico y propenso a los errores al usar ForEach es el atributo de colección. Este atributo debe especificarse, pero en diferentes casos, el valor del atributo es diferente. Hay tres situaciones principales:
1. Si el pasado en un solo parámetro y el tipo de parámetro es una lista, el valor del atributo de colección es la lista
2. Si el pasado en un solo parámetro y el tipo de parámetro es una matriz, el valor de la propiedad de la colección es una matriz
3. Si se pasan múltiples parámetros, necesitamos encapsularlos en un mapa. Por supuesto, un solo parámetro también se puede encapsular en un mapa. De hecho, si pasa en los parámetros, también los encapsulará en un mapa en el seno. La clave del mapa es el nombre del parámetro, por lo que en este momento el valor del atributo de colección es la clave de la lista pasada o el objeto de matriz en el mapa encapsulado por sí mismo.
Echemos un vistazo a los códigos de ejemplo para las tres situaciones anteriores:
1. Tipo de lista de parámetros individuales:
<Select id = "DynamicForEachTest" resultType = "Blog"> SELECT * de t_blog donde id en <foreach Collection = "list" index = "index" item = "item" Open = "(" separator = "," Close = ")">#{item} </foreach> </select>El valor de la colección anterior es la lista, y el mapeador correspondiente es como este
Lista pública <Blog> DynamicForeachTest (List <integer> IDS);
Código de prueba:
@TestPublic void DynamicForeachTest () {sqlSession session = util.getSqlSessionFactory (). OpenSession (); BlogMapper BlogMapper = Session.getMapper (BlogMapper.Class); List <SiTerger> IDS = nuevo = nuevo ArrayList <Integer> (); IDS.Add (1); IDS.Add (3); IDS.Add (6); List <Blog> Blogs = BlogMapper.DynamicForeachTest (IDS); para (blog Blog: Blogs) System.out.println (blog); session.close ();}2. Tipo de matriz de parámetros individuales:
<Select id = "DynamicForEach2Test" resultType = "Blog"> SELECT * de T_Blog Where ID en <foreach Collection = "Array" index = "index" item = "item" Open = "(" separator = "," Close = ")">#{item} </FOREACH> </select>La colección anterior es la matriz, el código mapeador correspondiente:
Lista pública <Blog> DynamicForeach2Test (int [] IDS);
Código de prueba correspondiente:
@TestPublic void DynamicForeach2Test () {sqlSession session = util.getSqlSession (). OpenSession (); BlogMapper BlogMapper = session.getMapper (blogMapper.Class); int [] ids = new int [] {1,3,6,9}; list <blog> Blogs = BlogMapper.dynnnic) (Blog Blog: Blogs) System.out.println (blog); session.close ();}3. Encapsula los parámetros en el tipo de mapa por ti mismo
<Select id = "DynamicForeach3Test" resultType = "Blog"> SELECT * de t_blog donde title Like "%"#{title} "%" e id en <foreach Collection = "IDS" index = "index" item = "item" open = "(" separator = "," cerrar = ")">#{item} </boreach> </etect>El valor de la colección anterior es IDS, que es la clave del mapa de parámetros que se pasa y el código mapeador correspondiente:
Lista pública <Blog> DynamicForeach3Test (map <string, object> params);
Código de prueba correspondiente:
@TestPublic void DynamicForeach3test () {sqlsession session = util.getSqlSessionFactory (). OpenSession (); BlogMapper BlogMapper = Session.getMapper (BlogMapper.Class); Lista final <Ineger> IDS = nueva IDS = nueva ArrayList <Integer> (); id.add (1); id.add (2); id.add (3); id.add (6); id.add (7); id.add (9); map <string, object> params = new Hashmap <string, object> (); params.put ("ids", ids); params.put ("title", "China"; BlogMapper.DynamicForeach3Test (Params); para (Blog Blog: Blogs) System.out.println (Blog); Session.Close ();}Lo anterior es el conocimiento relevante de la explicación detallada de la declaración foreach de mybatis presentada por el editor. ¡Espero que te sea útil!