Mybatis中使用foreach遍历Map实现多条件查询

Mybatis中使用foreach遍历Map实现多条件查询

对于多条件查询,我们使用map存储所有的条件,但是我不想手动对所有的value进行判断是否为空,于是想到遍历map,但事实是OGNL表达式的foreach并不支持map的遍历!

在多方尝试之后,我有了一个大胆的想法,在需要作为参数的map中加入该map自己所有的key,然后到xml中取出所有的key进行占位赋值,这样就可以遍历所有的value,也就是遍历所有的条件

// 多条件查询
Map<String,Object> map = new HashMap<>();
map.put("name","飞飞");
// 测试空格的去除
map.put("pwd","           ");
// 将map所有的key存入map
map.put("keys",map.keySet());
System.out.println(dao.getManyUserByMess(map));

xml中配置的具体实现:

<!-- 多条件查询用户 -->
<resultMap id="users" type="com.jql.pojo.User"></resultMap>
<select id="getManyUserByMess" parameterType="java.util.Map" resultMap="users">
    select * from `user`
    <where>
        <foreach collection="keys" item="key" >
            <if test='_parameter.get(key) != null
                      and _parameter.get(key).toString().trim() != ""
                      and key != "keys"'>
                and ${key} = #{${key}}
            </if>
        </foreach>
    </where>
</select>

查询结果:
在这里插入图片描述
总结
多条件查询是实际应用中使用较多的查询之一,但是之前使用纯JDBC代码进行多条件查询的书写,十分繁琐,工作量浩大。如今在使用mybatis之后,通过结合xml的使用,极大的简化了sql的书写,如果可以在熟练使用各类查询标签之后,灵活的进行结合可以达到事半功倍的效果!

猜你喜欢

转载自blog.csdn.net/WebSpider_1/article/details/107923295