这是标题hahahas

mybatis 使用集合

java :
    List<Integer> getArticleIdByTags(List<ArticleTag> articles);

mapper : 
    <select id="getArticleIdByTags" parameterType="java.util.List" resultType="java.lang.Integer">
        select
        article_id
        from ymeixin_article_tag
        where is_delete = 0
        <foreach collection="list" item="articleTag" open="AND" separator="OR"
                 close="GROUP BY article_id HAVING COUNT(*) >=">
            tag_id = #{articleTag.tagId,jdbcType=INTEGER} AND type = #{articleTag.type,jdbcType=INTEGER}
        </foreach>

        ${list.size} --传入集合的长度(找一好久没找到,还是一位大哥告诉的)

    </select>

自定义resultMap

mapper :
        <resultMap id="ResultTag" type="com.ymeixin.model.Tag">
            <id property="id" column="id" javaType="java.lang.Integer" jdbcType="INTEGER"/>
            <result property="name" column="part_name" javaType="java.lang.String" jdbcType="VARCHAR"/>
            <result property="type" column="type" javaType="java.lang.Integer" jdbcType="INTEGER"/>
        </resultMap>

        <select id="getPopularTags" parameterType="java.util.List" resultMap="ResultTag">
                select
                id,part_name,2 type
                from ymeixin_body_tag
                <where>
                    is_delete = 0 AND id in
                    <foreach collection="list" index="index" item="id" open="(" separator="," close=")">
                        #{id}
                    </foreach>
                </where>
            </select>

mapper遍历list map

java :
        Map<String, Object> hashMap = new HashMap<>();
        hashMap.put("previousMonth", new Date((System.currentTimeMillis() - 30L * 24 * 60 * 60 * 1000)));
        hashMap.put("limit", NumberProfile.TAG_NUM);
        List<QaTag> tagIds = qaTagMapper.getPopularTags(hashMap);

mapper :
    <select id="getPopularTags" parameterType="java.util.Map" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from ymeixin_qa_tag
        where create_time > #{previousMonth} AND is_delete = 0
        group by tag_id,type
        order by count(*) DESC
        limit #{limit}
    </select>

    //map中包含list,直接根据key 取值
    <select id="selectTagByIds" parameterType="java.util.Map" resultMap="ResultTag">
        select
        id,`name`
        from ymeixin_med_equ
        where is_delete = 0 AND type=#{type}
        <foreach collection="ids" index="index" item="id" open="AND id in (" separator="," close=")">
            #{id}
        </foreach>
    </select>