1. 当查询的参数只有一个时
findByIds(List<Long> ids)
1.1 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list
<select id="findByIdsMap" resultMap="BaseResultMap"> Select <include refid="Base_Column_List" /> from jria where ID in <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> </select>
findByIds(Long[] ids)
1.2 如果参数的类型是Array,则在使用时,collection属性要必须指定为 array
<select id="findByIdsMap" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from tabs where ID in <foreach item="item" index="index" collection="array" open="(" separator="," close=")"> #{item} </foreach> </select>
2. 当查询的参数有多个时,例如 findByIds(String name, Long[] ids)
这种情况需要特别注意,在传参数时,一定要改用Map方式, 这样在collection属性可以指定名称
Class : Service
/** * 根据fid、rid、name查询AirCon,fid存在则根据fid查询、rid存在则根据rid查询、name存在则根据name查询、 * 都不存在则查询全表 */ @Override public List<AirCon> getAirCons(Integer fid, Integer rid, String name) { Map<String, Object> map = new HashMap<String, Object>(); map.put("fid", fid); map.put("rid", rid); map.put("name", name); map.put("ids", null); return airConDao.getAirCons(map);
Inteface : Dao
/** * 根据fid、rid、name、ids(id的集合)查询AirCon,fid存在则根据fid查询、rid存在则根据rid查询、 * name存在则根据name查询、ids不为空则根据id的集合查询,都不存在则查询全表 * * @author Liang * * 2017年4月19日 */ List<AirCon> getAirCons(Map<String, Object> map);
XML : Dao
<select id="getAirCons" resultType="com.xindatai.ibs.environ.device.bean.AirCon"> SELECT id,rid,fid,logicid,`name`,icon,`type`,gwIP,gwPort,modbus_addr AS modbusAddr,`power`,wind,temp,conn_status AS connStatus,update_time AS updateTime,create_time AS createTime FROM aircon <where> <if test="fid != null"> fid = #{fid} </if> <if test="rid != null"> AND rid = #{rid} </if> <if test="name != null and name != ''"> AND name LIKE CONCAT('%',name,'%') </if> <if test="ids != null"> id IN <foreach collection="ids" close=")" index="index" item="item" open="(" separator=","> #{item} </foreach> </if> </where> </select>
啦啦啦