Java >> Java tutorial >  >> Tag >> mybatis

Sådan overføres et heltalsarray til IN-klausul i MyBatis

MyBatis-brugervejledningen til dynamisk SQL har et eksempel på, hvordan man bruger en foreach-løkke til at bygge forespørgselsstrengen, som fungerer for lister og arrays.

Før release 3.2 skulle du bruge xml-konfiguration for at bruge dynamisk sql, med nyere versioner skulle det også være muligt at bruge dynamisk sql i annoteringer.

<select id="selectPostIn" resultType="domain.blog.Post">
    SELECT *
    FROM POST P
    WHERE ID in
    <foreach item="item" index="index" collection="list"
             open="(" separator="," close=")">
        #{item}
    </foreach>
</select>

JA, du kan gøre det ved at bruge anmærkninger.

Hvis du bruger postgresql , kan du gøre som i dette indlæg.

Hvis du bruger MySQL prøv disse ændringer i dit kodeeksempel:

Mybatis-metode ved hjælp af annoteringer

@Select(SEL_QUERY)
    @Results(value = {@Result(property="id",column="ID")})
    List<Integer> getIds(@Param("usrIds") String usrIds);

Forespørgsel (ved hjælp af MySQL)

select distinct ID from table a where FIND_IN_SET( a.id, #{usrIds}) <> 0

Metodekald

Integer[] arr = new Integer[2];
arr[0] = 1;
arr[1] = 2;

String usrIds= "";
for (int id : ids) {
    usrIds += id + ",";
}

mapper.getIds(usrIds) 

Java tag