jpql
参考:https://stackoverflow.com/questions/52591535/spring-jpa-no-converter-found-capable-of-converting-from-type
@Componentpublic interface CrowdReportDAO extends CrudRepository<CrowdReportDO, String> { @Query(value = "select new com.tianrang.cbd.amc.mock.api.vo.CrowdReportVO(r.channel, r.crowd, sum(r.crowdSize), r.activityName, min(r.activityBeginTime), max(r.activityEndTime), sum(r.uv), c.name) from crowd_report r join crowd c on r.crowd = c.id where channel= '1' group by r.crowd, r.activityName order by min(r.activityBeginTime) desc") List<CrowdReportVO> getAggregateReport();}@Data@AllArgsConstructorpublic class CrowdReportVO { String channel; String crowd; String crowdSize; String activityName; String activityBeginTime; String activityEndTime; Long uv; String crowdName;}
@RestController@RequestMapping(path = UriName.CROWD_REPORT)public class CrowdReportController extends BaseController { @Resource CrowdReportDAO crowdReportDAO; @GetMapping public List<CrowdReportVO> retrieveList(@Valid CrowdReportGetDTO dto) { return crowdReportDAO.getAggregateReport(); }}
native query
@Componentpublic interface CrowdReportDAO extends CrudRepository<CrowdReportDO, String> { @Query(value = "select channel, crowd, c.name as crowd_name, activity_name, min(activity_begin_time) as activity_begin_time, max(activity_end_time) as activity_end_time, sum(crowd_size) as crowd_size, sum(uv) as uv from crowd_report r join crowd c on r.crowd = c.id where channel= '1' group by crowd, activity_name order by activity_begin_time desc;", nativeQuery = true) List<CrowdReportVO> getAggregateReport();}// 参考https://stackoverflow.com/questions/49500309/spring-jpa-native-query-with-projection-gives-converternotfoundexceptionpublic interface CrowdReportVO { String getChannel(); String getCrowd(); // 不会自动将下划线格式转为驼峰,需要手动添加注解 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections.interfaces.open @Value("#{target.crowd_size}") String getCrowdSize(); @Value("#{target.activity_name}") String getActivityName(); @Value("#{target.activity_begin_time}") String getActivityBeginTime(); @Value("#{target.activity_end_time}") String getActivityEndTime(); Long getUv(); @Value("#{target.crowd_name}") String getCrowdName();}
@RestController@RequestMapping(path = UriName.CROWD_REPORT)public class CrowdReportController extends BaseController { @Resource CrowdReportDAO crowdReportDAO; @GetMapping public List<CrowdReportVO> retrieveList(@Valid CrowdReportGetDTO dto) { return crowdReportDAO.getAggregateReport(); }}