mybatis传入参数的几种方法

传入复杂的map数据

先来看一下需要传入的数据结构

/**
 *实际数据结构复杂很多,不过通过这个可以说明问题
 */
{
"keywords":"string",//String类型
"clazzs":[{
		clazz_id:1, //int
		clazz_user:"软件" //String
	},{
		clazz_id:2, //int
		clazz_user:"网络" //String
	},{
		clazz_id:3, //int
		clazz_user:"移动" //String
	}]	//list类型
}	//map结构

编写dao层接口

    /**
     * 通过班级名称模糊查询班级
     * @param cname
     * @return
     */
    ArrayList<Clazz> getClazzListByName(String cname);

    /**
     * 通过学院,班级,角色列表分页获取用户信息获取接口
     */
    ArrayList<User> getFilterUser(Map<String,Object> parames);

mapper.xml

        <!--根据班级名称模糊查询班级-->
	<select id="getClazzListByName" parameterType="string" resultType="clazz">
		SELECT * FROM t_clazz WHERE clazz_name LIKE '%${value}%'<!--这里基本数据类型${}里面必须为value-->
	</select>


<select id="getFilterUser"  resultMap="userClazzFacultyRoleMap">
		SELECT user_id,user_name,user_sex,user_phone,faculty_id,clazz_id,role_id,state_id FROM `t_user`
		<where>
                        <!--这里test="clazzs != null and clazzs.size() 相当于test="map.get("clazzs ") != null and map.get("clazzs ").size()-->
			<if test="clazzs != null and clazzs.size() > 0">
				and clazz_id in
                                <!--注意collection="clazzs"属性-->
				<foreach collection="clazzs" open="(" close=")" separator="," index="index" item="citem">
					#{citem.clazz_id}<!--这里从每一项(citem)中通过 "." 运算付拿到数据-->
				</foreach>
			</if>
			<if test="keywords != null">
				and user_name like '%${keywords}%' <!--这里${keywords}相当于map.get("keywords")-->
			</if>
			<if test="sex != null and sex > -1">
				and user_sex = #{sex}
			</if>
			<if test="state_id != null and state_id > -1">
				and state_id = #{state_id}
			</if>

			<if test="fids != null and fids.size() > 0">
				and faculty_id in
				<foreach collection="fids" open="(" close=")" separator="," index="index" item="fid">
					#{fid}
				</foreach>
			</if>
			<if test="rids != null and rids.size() > 0">
				and role_id in
				<foreach collection="rids" open="(" close=")" separator="," index="index" item="rid">
					#{rid}
				</foreach>
			</if>
		</where>
		<choose>
			<when test="start != null  and length != null and start >= 0 and length > 0">
				limit #{start},#{length}
			</when>
			<otherwise>
				limit 0,0
			</otherwise>
		</choose>
	</select>

编写测试类

@Test
    public void testScreenUser(){
        Map<String,Object> map = new HashMap<>();
        map.put("fids",Arrays.asList(1));
        String keywords="";
        List<Clazz> clazzs =null;
        if(keywords != null && !keywords.equals("")){
            clazzs =userDao.getClazzListByName(keywords);
        }
        if(clazzs !=null && clazzs.size()>0){
            map.put("clazzs",clazzs);
        }else {
            map.put("keywords",keywords);
        }
        map.put("start",0);
        map.put("length",50);
        System.out.println(userDao.getFilterUser(map));
    }

原文地址:https://www.cnblogs.com/shaoyu/p/11797222.html