需求场景:某些时候,需要统计数据库某个字段的所有值,以及该值在库中出现的次数。然后和其他数据一起返回。
首先,新建个名为yuyouCount 的entity类。这个就是我们要统计的对应字段数据。后面格式要求就是按这个entity
/**
* 状况统计DTO
*/
@Data
public class yuyouCount {
/**
* 用户状况
*/
private Long yuyouzk;
/**
* 数量
*/
private Integer count;
}
再到对应表名的Service.java里编写,我这里表是yupifensi,统计的用户状况yuyouzk有很多值,根据yupiid去查用户的状况,
public interface yupifensiService extends IService< yupifensi> {
/**
* 根据ID和用户状况查询记录详情
* @param yupiid动态ID
* @param yuyouzk患者状况
* @return 记录详情列表
*/
List<Yhjbjl> getyupifensi(Long yupiid, Long yuyouzk);
/**
* 统计指定用户动态ID的状况及其数量
* @param yupiid动态ID
* @return 用户状况统计列表
*/
List<YhjbjlHzzkCount> countyuyouzk(Long yupiid);
}
yupifensiServiceImpl.java
@Service
public class yupifensiServiceImpl extends ServiceImpl<yupifensiMapper, yupifensi>
implements yupifensiService{
@Autowired
private yupifensiMapper yupifensiMapper;
/**
* 根据用户动态ID和用户状况查询记录详情
* @param yupiid 动态ID
* @param yuyouzk 用户状况
* @return 记录详情列表
*/
@Override
public List<yupifensi> getyupifensi(Long yupiid, Long yuyouzk) {
LambdaQueryWrapper<yupifensi> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(yupifensi::getYUPIID, yupiid)
.eq(Yhjbjl::getYUYOUZK, yuyouzk)
.eq(Yhjbjl::getIS_DELETE, 0); // 不包括已删除的数据
return yupifensiMapper.selectList(queryWrapper);
}
/**
* 统计用户的动态ID的用户状况及其数量
* @param yupiid 用户的动态ID
* @return 用户状况统计列表
*/
@Override
public List<yuyouCount > countyuyouzk(Long yupiid) {
return yupifensiMapper.countyuyouzk(yupiid);
}
}
yupifensiMapper.java 用于在xml写sql执行的
@DS("busi")
public interface yupifensiMapper extends BaseMapper<yupifensi> {
/**
* 统计指定动态ID的用户状况及其数量
* @param yupiid 动态ID
* @return 状况统计列表
*/
List<yuyouCount > countyuyouzk(Long yupiid);
}
再到yupifensiMapper.xml文件写sql
<!-- 统计患者状况及数量 -->
<select id="countyuyouzk" resultMap="yupifensiMapper">
SELECT yuyouzk, COUNT(*) AS count
FROM yupifensi
WHERE yupiid= #{yupiid}
AND IS_DELETE = 0
GROUP BY yuyouzk
</select>
再到controller写接口
@RestController
@RequestMapping("/api/yupi")
public class BchzdtController {
@Autowired
private YupifensiService yupifensiService ;
@PostMapping("/getyupifensi")
public FebsResponse getyupifensi(@RequestBody Yupifensi yupifensi ) {
try {
if (yupifensi.getID() == null) {
return new FebsResponse().fail().message("动态ID不能为空");
}
// 创建结果Map
Map<String, Object> resultMap = new HashMap<>();
// 1. 查询状况统计数据
List<yuyouCount > yuyouzkCounts = yupifensiService .countyuyouzk(bchzdt.getDTID());
resultMap.put("yuyouzkCounts ", yuyouzkCounts );
// 2. 如果传入了具体yuyouzk值,则查询对应记录详情
if (yupifensi .getyuyouzk() != null) {
List<yupifensi> yupifensiList = yupifensiService .getyupifensi(yupifensi .getID(), yupifensi .getYUYOUZK());
resultMap.put("recordList", yupifensiList.isEmpty() ? new ArrayList<>() : yupifensiList );
} else {
resultMap.put("recordList", new ArrayList<>());
}
return new FebsResponse().success().data(resultMap).message("查询成功");
} catch (Exception e) {
return new FebsResponse().fail().message("查询失败:" + e.getMessage());
}
}
}