项目地址查询,省、市、县以递归集、市、县以子集。Vo如下:
@Data public class AreaQueryVo { @JsonSerialize(using = ToStringSerializer.class) private Integer id; private String cname; private List<AreaQueryVo> areaQueryVos; }
@Data注解为lombok,了解自己不知道的事情。
controller层代码如下:
/** * 查询地址表 * @return */ @RequestMapping("/selectArea") private List<AreaQueryVo> selectArea() { List<AreaQueryVo> areaQueryVos; //查询id对应数据为0 areaQueryVos = areaService.selectArea(0L); for (AreaQueryVo areaQueryVo : areaQueryVos) { List<AreaQueryVo> aqv = areaService.selectArea(areaQueryVo.getId()); digui(aqv); areaQueryVo.setAreaQueryVos(aqv); } return areaQueryVos; } public void digui(List<AreaQueryVo> aqv) { List<AreaQueryVo> areaQueryVoList; for (AreaQueryVo areaQueryVo : aqv) { areaQueryVoList = areaService.selectArea(areaQueryVo.getId()); if (areaQueryVoList.size() > 0) { areaQueryVo.setAreaQueryVos(areaQueryVoList); digui(areaQueryVoList); //循环调用自己 } } }
service层:
@Override public List<AreaQueryVo> selectArea(long parentId) { List<AreaQueryVo> areaQueryVos = areaDao.selectArea(parentId); return areaQueryVos; }
这里记得做下非空判断,防止查不到数据出错。
dao层代码如下:
<select id="selectArea" resultType="com.rsc.app.vo.AreaQueryVo"> SELECT area.id,area.cname,area.parent_id FROM area <where> <if test="parentId != null"> area.parent_id = #{parentId} </if> </where> </select>
一个非常简单的查询句子,但是这里要注意,因为是传来的int或long无法判断数据类型。否则会出现不走if查询所有数据的条件。