MyBatis传入多个参数,传入数组和列表数据的处理
java定义:
List<RoleEx> selectByRoleIdList(@Param("roles")String[] roles); List<RoleEx> selectByRoleIdList1(@Param("roles")List<Integer> roles);
xml定义:
<select id="selectByRoleIdList" resultMap="NamedResultMap" > SELECT .... FROM tm04_role a <if test="roles != null"> where a.role_id in( <foreach collection="roles" item="roleId" index="index" separator="," > #{roleId,jdbcType=INTEGER} </foreach> ) </if> order by a.role_name </select> <select id="selectByRoleIdList1" resultMap="NamedResultMap" > SELECT ... FROM tm04_role a <if test="roles != null"> where a.role_id in( <foreach collection="roles" item="roleId" index="index" separator="," > #{roleId,jdbcType=INTEGER} </foreach> ) </if> order by a.role_name </select>
测试代码:
String[] roles1 = {"1","2"}; List<RoleEx> list3 = mapper.selectByRoleIdList(roles1); System.out.println(objMapper.writeValueAsString(list3)); List<Integer> roles2 = new ArrayList<Integer>(); roles2.add(1); roles2.add(2); List<RoleEx> list4 = mapper.selectByRoleIdList1(roles2); System.out.println(objMapper.writeValueAsString(list4));
看看标签定义:
在mybatis的mapper配置文件中,可以利用<foreach>标签实现sql条件的循环,可完成类似批量的sql mybatis接受的参数分为:(1)基本类型(2)对象(3)List(4)数组(5)Map 无论传哪种参数给mybatis,他都会将参数放在一个Map中: 如果传入基本类型:变量名作为key,变量值作为value 此时生成的map只有一个元素。 如果传入对象: 对象的属性名作为key,属性值作为value, 如果传入List: "list"作为key,这个List是value (这类参数可以迭代,利用<foreach>标签实现循环) 如果传入数组: "array"作为key,数组作为value(同上) 如果传入Map: 键值不变。 <foreach>标签的用法: 六个参数: collection:要循环的集合 index:循环索引(不知道啥用。。) item:集合中的一个元素(item和collection,按foreach循环理解) open:以什么开始 close:以什么结束 separator:循环内容之间以什么分隔
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。