需求: 要求查询一个站点在地市和省的排名信息出来。
效果图:
代码实现: 注释的部分是起初采用的hibernate 查询,但无论怎么写都会报 space is not allowed after parameter prefix ':'...... 后来上网查了,有人也遇到过类似问题,给出的解决方法是转义冒号。 http://blog.csdn.net/woshizhangliang999/article/details/48036407 但是在不知道为何在我里不起作用。 可能是我程序限制??反正不太清楚。 后来没办法采用了原始的JDBC 查询。 在此记录一下。 代码如下。
@Autowired private JdbcTemplate jdbcTemplateLoms;
public List getStationGameSalesRank(String regionCode) { StringBuffer sb = new StringBuffer(); sb.append("select @curRank:=@curRank+1 AS rank, sales.* from (SELECT s.station_id stationId, sum(s.this_year_sale) sales_sum FROM station_game_sales_shanxi s "); // String sql = "select @curRank \\:=@curRank+1 AS rank, sales.* from ( "+ // "SELECT s.station_id stationId, sum(s.this_year_sale) sales_sum FROM station_game_sales_shanxi s "; // if (regionCode != null && !"".equals(regionCode) && !"0".equals(regionCode)) { sb.append("LEFT JOIN station sta on s.station_id = sta.station_id "); sb.append("Where sta.region_code ='"+regionCode+"' "); } sb.append("GROUP BY s.station_id ORDER BY sales_sum DESC ) sales, (SELECT @curRank:=0) q "); List list = null; try{ list = jdbcTemplateLoms.queryForList(sb.toString()); // Session session = (Session) em.getDelegate(); // SQLQuery query = session.createSQLQuery(sql); // if (regionCode != null && !"".equals(regionCode) // && !"0".equals(regionCode)) { // query.setParameter("regionCode", regionCode.trim()); // } // query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP); // list = query.list(); }catch(Exception ex){ ex.printStackTrace(); } return list; }