在多表查詢返回結果時:應該如何處理呢?
第一種:在xml中使用 resultMap 處理,我本人不推薦,因爲(如果一個xml中如果有多個多張表查詢,就得寫多個resultMap與之對應)
第二種:返回結果用實體接收,但是返回的是多張表的字段,那就得寫一個實體中包含多張表的所有屬性才能接收,這裏也不建議
第三種:也是準備說的
1).我們查詢返回的結果無非是一個個的map類型,然後封裝進入List中,看一下xml文件
<!-- 查詢超管列表 -->
<select id="managerList" resultType="map" >
SELECT m.*,r.rolename FROM
tbl_manager_info m
INNER JOIN
tbl_role_info r
ON
m.account=r.account
AND
m.type='0'
<if test="account!=null and account!='' ">
AND m.account=#{account}
</if>
ORDER BY
m.createdtime
DESC
</select>
2). java代碼中的mapper,返回的類型我們設置爲List<Map<String,Object>>即可,這裏必須繼承BaseMapper類,才能實現分頁,注意了
public interface ManagerMapper extends BaseMapper<TblManagerInfo>{
//查詢超管列表
public List<Map<String,Object>> managerList(Pagination page,Map<String,Object> params) throws Exception;
3). service層,記得繼承 IService
public interface ManagerService extends IService<TblManagerInfo>{
//查詢超管列表
public Page<Map<String,Object>> managerList(Page<Map<String,Object>> page,Map<String,Object> params)throws Exception;
}
4).service實現類
@Service
public class ManagerServiceImpl extends ServiceImpl<ManagerMapper, TblManagerInfo> implements ManagerService {
@Autowired
private ManagerMapper managerDao;
@Override
public Page<Map<String, Object>> managerList(
Page<Map<String, Object>> page, Map<String, Object> params)
throws Exception {
return page.setRecords(managerDao.managerList(page, params));
}
}
5).controller層
//超管列表
@RequestMapping("/admin/queryManagerList")
@ResponseBody
public ResultVo queryManagerList(HttpServletResponse response,HttpServletRequest request,
@RequestParam("page") Integer pageNo,
@RequestParam("limit") Integer pageSize,
@RequestParam(value="account",defaultValue="")String account
) throws Exception{
//這是我自己定義的封裝類,返回前端的整和
ResultVo rv=ResultVo.getResultVo();
try {
Map<String,Object> params=new WebUtils().getMap();
params.put("account", account);
//這個位置開始調用
Page<Map<String,Object>> page=new Page<Map<String,Object>>(pageNo, pageSize);
managerService.managerList(page,params);//這裏就得到數據了
rv.setCount(page.getTotal());//往封裝類存入數據量
rv.setData(page.getRecords());//往封裝類存入數據
rv.setCode("0");
} catch (Exception e) {
rv.setCode("1");
e.printStackTrace();
}
return rv;
}