ibatis并集交集非集的查询

场景:数据库三张表,article, tag, article_tag_relation。

要求通过标签(tag)进行文章的查询,三个查询条件:交,并,非。ComplexQuery:List<Long> andTagIds; List<Long> orTagIds; List<Long> notTagIds;

sqlmap的select如下,通过sql搞定,不过性能堪忧,以后有机会用一些其他的工具进行优化吧。

<select id="listArticleIdsByQuery" resultClass="java.lang.Long" parameterClass="ComplexQuery">

        select distinct(article_id) from article_tag_relation where 1 = 1

<dynamic>

    <isNotEmpty prepend="and" property="andTagIds">

             <iterate conjunction="and" property="andTagIds">

article_id in (select distinct(article_id) from article_tag_relation where tag_id = #andTagIds[]#)

</iterate>

            </isNotEmpty>

            <isNotEmpty prepend="and" property="notTagIds">

<iterate conjunction="and" property="notTagIds">

article_id not in (select distinct(article_id) from article_tag_relation where tag_id = #notTagIds[]#)

</iterate>

            </isNotEmpty>

    <isNotEmpty prepend="and" property="orTagIds">

<iterate conjunction="," open="tag_id in (" close=")" property="orTagIds">

#orTagIds[]#

</iterate>

            </isNotEmpty>

</dynamic>

        limit #startRow#,#pageSize#

</select>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值