A foreach é usada principalmente na construção em condições, pode iterar sobre uma coleção em declarações SQL. Os atributos do elemento foreach incluem principalmente itens, índices, coleta, abertura, separador e fechamento. O item representa o alias quando cada elemento da coleção é iterado. O índice especifica um nome para representar a posição na qual cada iteração é atingida durante o processo de iteração. O Open representa o que começa com a declaração, o separador representa quais símbolos são usados como separadores entre cada iteração e o fechamento representa o que termina. A coisa mais crítica e mais propensa a erros ao usar o foreach é o atributo de coleção. Esse atributo deve ser especificado, mas em diferentes casos, o valor do atributo é diferente. Existem três situações principais:
1. Se o passado passado em um único parâmetro e o tipo de parâmetro for uma lista, o valor do atributo de coleção é a lista
2. Se o passado em um único parâmetro e o tipo de parâmetro for uma matriz, o valor da propriedade da coleção é
3. Se houver vários parâmetros passados, precisamos encapsulá -los em um mapa. Obviamente, um único parâmetro também pode ser encapsulado em um mapa. De fato, se você passar em parâmetros, também os encapsulam em um mapa na mama. A chave do mapa é o nome do parâmetro; portanto, neste momento, o valor do atributo de coleção é a chave da lista ou objeto de matriz passada no mapa encapsulado por si mesmo.
Vamos dar uma olhada nos códigos de exemplo para as três situações acima:
1. Tipo de lista de parâmetros únicos:
<select id = "dynamicforeachtest" resultype = "blog"> selecione * do t_blog onde id em <foreach collection = "list" index = "index" item = "item" open = "(" separator = "," close = ")">#{item} </foreach> </select>O valor da coleção acima é a lista e o mapeador correspondente é assim
Lista pública <blog> DynamicForEachtest (List <Teger> IDs);
Código de teste:
@Testpublic void dynamicForEachtest () {SqlSession Session = util.getSqlSessionFactory (). OpenSession (); Blogmapper Blogmapper = session.getMapper (blogmapper.class); list <Teger> ids = new Arraylist <Teger> (); ids.add (1); = blogmapper.dynamicForEachtest (IDS); para (blog blog: blogs) system.out.println (blog); session.close ();}2. Tipo de matriz de parâmetro único:
<select id = "dynamicForEach2test" resultype = "blog"> selecione * do t_blog onde id em <foreach collection = "array" index = "index" item = "item" open = "(" separator = "," close = ")">#{item} </foreach> </leclect>A coleção acima é a matriz, o código de mapero correspondente:
Lista pública <blog> DynamicForEach2test (int [] IDs);
Código de teste correspondente:
@Testpublic void dynamicForEach2Test () {SQLSession Session = util.getSqlSessionFactory (). OpenSession (); Blogmapper Blogmapper = session.getMapper (blogmapper.class); blogs; blogs) system.out.println (blog); session.close ();}3. Encapsular os parâmetros no tipo de mapa sozinho
<select id = "DynamicForEach3test" ResultType = "Blog"> Selecione * FROM T_BLOG Onde o título como "%"#{title} "%" e ID em <foreach collection = "ids" index = "índice" item = "item" <//"" ("separator =", "Close =") ">#{} </paraEach>O valor da coleção acima é o IDS, que é a chave do mapa de parâmetros passados, e o código do mapeador correspondente:
Lista pública <blog> dynamicForEach3test (map <string, object> params);
Código de teste correspondente:
@Testpublic void dynamicForEach3test () {SqlSession Session = util.getSqlSessionFactory (). OpenSession (); Blogmapper Blogmapper = session.getmapper (blogmapper.class); Lista final <TEGER> ids = novo ArrayList <Integer> (); ids.add (1); ids.add (2); ids.add (3); ids.add (6); ids.add (7); ids.add (9); map <string, object> params = new Hashmap <string, object> () (); "ids",; ids); blogmapper.dynamicforeach3test (params); para (blog: blogs) system.out.println (blog); session.close ();}O exposto acima é o conhecimento relevante da explicação detalhada da declaração de mybatis, apresentada a você pelo editor. Espero que seja útil para você!