将 Pair 列表传递给 myBatis
pass list of Pair to myBatis
我需要一个 Pair 到 MyBatis 查询的列表:
在映射器中:
List<Usage> getUsageByUserLanguagesAndDates(
@Param("userLanguagePairList") List<Pair<String, String>> userLanguageMap,
@Param("startDate") DateTime startDate,
@Param("endDate") DateTime endDate)
列表> userLanguageMap 如下所示:
List<Pair<String, String>> pairs = Lists.newArrayList;
pairs.add(new Pair("12345", "en-US"));
pairs.add(new Pair("23456", "en-GB"));
...
查询如下所示:
SELECT
...
FROM
...
WHERE 1=1
AND
(
(l.userid = '12345' AND ll.language_code = 'en-US') OR
(l.userid = '23456' AND ll.language_code = 'en-GB')
)
;
我试着将查询写成:
AND (
<foreach item="userLanguagePair" index="index" collection="userLanguagePairList" open="" separator="," close="">
(
l.userid = #{userLanguagePair.first}
AND
ll.language_code = #{userLanguagePair.second}
)
OR
</foreach>
)
...
但最后会有一个额外的OR:
AND
(
(l.userid = '12345' AND ll.language_code = 'en-US') OR
(l.userid = '23456' AND ll.language_code = 'en-US') OR
)
我怎样才能去掉最后一个 'OR'?
来自http://www.mybatis.org/mybatis-3/dynamic-sql.html:
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
,
所以我会说你的代码应该是这样的:
...
WHERE 1=1 AND (
<foreach item="userLanguagePair" index="index" collection="userLanguagePairList" open="(" separator="OR" close=")">
l.userid = #{userLanguagePair.first}
AND
ll.language_code = #{userLanguagePair.second}
</foreach>
)
但现在我无法检查这是否会生成正确的句子。
我需要一个 Pair 到 MyBatis 查询的列表:
在映射器中:
List<Usage> getUsageByUserLanguagesAndDates(
@Param("userLanguagePairList") List<Pair<String, String>> userLanguageMap,
@Param("startDate") DateTime startDate,
@Param("endDate") DateTime endDate)
列表> userLanguageMap 如下所示:
List<Pair<String, String>> pairs = Lists.newArrayList;
pairs.add(new Pair("12345", "en-US"));
pairs.add(new Pair("23456", "en-GB"));
...
查询如下所示:
SELECT
...
FROM
...
WHERE 1=1
AND
(
(l.userid = '12345' AND ll.language_code = 'en-US') OR
(l.userid = '23456' AND ll.language_code = 'en-GB')
)
;
我试着将查询写成:
AND (
<foreach item="userLanguagePair" index="index" collection="userLanguagePairList" open="" separator="," close="">
(
l.userid = #{userLanguagePair.first}
AND
ll.language_code = #{userLanguagePair.second}
)
OR
</foreach>
)
...
但最后会有一个额外的OR:
AND
(
(l.userid = '12345' AND ll.language_code = 'en-US') OR
(l.userid = '23456' AND ll.language_code = 'en-US') OR
)
我怎样才能去掉最后一个 'OR'?
来自http://www.mybatis.org/mybatis-3/dynamic-sql.html:
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
,
所以我会说你的代码应该是这样的:
...
WHERE 1=1 AND (
<foreach item="userLanguagePair" index="index" collection="userLanguagePairList" open="(" separator="OR" close=")">
l.userid = #{userLanguagePair.first}
AND
ll.language_code = #{userLanguagePair.second}
</foreach>
)
但现在我无法检查这是否会生成正确的句子。