使用select new map()可以优化查询语句,还能更好的查询一些语句。
传统查询语句:
public interface LineRepository extends JpaRepository<Line, String> { Line findOne(String startNumber); }
@Component @Autowired
public List<String> getLineName() {
}
|
结果list中,每条记录对应一个object数组,object[]中每个元素为查询语句中列的序号(从0开始)。
使用new map()查询语句:
@Query("select new map(line_name as lineName) from Line order by sortOrder")
List<Map<String, String>> nameMaps=lineRepository.findNames();
|
结果list中,每条记录对应一个map,map中key为语句中列的别名。如果没有别名,则是从0开始,第一列是0,第二列是1,依次增。
简单实例:
查询某时间段内某台闸机的超时交易类型的总交易数和总的交易金额。
@Query("select new map(count(t) as count,sum(t.money) as sum) from Trip t where t.bomTradeType in ?1 and t.payTerminal like ?2 " Map<String, Long> statistics = triprepository.statisticsBybomTradeType(payOvertime, payTerminal, startTime,
int count=statistics.get("count").intValue(); long sumMoney=(statistics.get("sum") == null ? 0 : statistics.get("sum"); |