就是我的项目里有个根据输入所在区域和起始时间以及终止时间来查询 某停车场‘已占用的车位数’,‘实际能用的车位数’,‘总车位数’,
现在要查询的这三个字段都有实例和数据库表字段,也在resultMap里面。这个是已经写好的,并且参与了page分页。
现在我想增加一个只在查询时会显示的‘未占用的车位数’,不动数据库和resultMap,如何在业务层把它拼接进去?或者有没有别的思路?
public IPage selectForParkingDetail(String address, LocalDate dateS, LocalDate dateE, IPage page) {
return page.setRecords(baseMapper.selectForParkingDetail(address,dateS,dateE,page));
}
没报错,用我下面的想法结果不返回数据
起初我是直接在mapper.xml里面修改了sql语句,在select后面加了一个 real_park - use_park as unuse_park,(实际减已用别名未用)想通过别名一下显示出来。
但是测试的时候发现在数据库里运行那个语句是可以查的,但是在postman里面测接口的时候不会返回那个我别名的字段和数据,查不出来。
然后我就想是不是因为别名的那个字段没有被映射到resultMap里所以才不显示。
然后我了解到好像是可以另写一个sql拼接过去。但是我想了半天没想明白怎么去拼接又不会影响原本的分页。
结果就是需要在返回给前端的数据里多给一个‘未占用的车位数’的数据,其它的不变,本来的话好像数据库里加个字段,对应的xml,实体类也加上就能解决问题的东西,但是现在不能动原来的数据库,只在要查的时候显示。应该怎么弄?
方案1:如果可以根据其他字段算出“未占用的车位数”的话,可以在数据查完用代码算出结果封装返回给前端
方案2:xml里的resultMap是可以多个的,可以新增一个resultMap继承原来的resultMap,新增一个字段即可
方案3:如果不想新增resultMap,可以在自定义sql那里的resultType参数填你返回给前端的vo,查询的时候字段名使用别名对应vo的字段
<select id="selectDemo" resultType="com.ralph.resturnVO">
select file1 as 'filed1' from table_name
</select>
1.首先返回给前台的ParkInfoVO中需要新加 一个未占用的车位数 属性unusePark;
2.其次
return page.setRecords(baseMapper.selectForParkingDetail(address,dateS,dateE,page));
这句改为
ParkInfoVO parkInfoVO = baseMapper.selectForParkingDetail(address,dateS,dateE,page);
parkInfoVO.setUnusePark(parkInfoVO.getRealPark-parkInfoVO.getUsePark );
return page.setRecords(parkInfoVO);
这样应该就行了吧