コード例 #1
0
  @Transactional(propagation = Propagation.NOT_SUPPORTED)
  public List<?> pageMsSqlParams(
      String sql, Object[] args, Pager page, Class<?> clazz, String orderItem) {

    StringBuilder countSql = new StringBuilder();
    countSql.append("select count(*) from (").append(sql).append(") as c");

    int count = 0;
    count = this.getCountItems(sql);
    page.setItems(count);
    StringBuilder pageSql = new StringBuilder();
    // count M
    int m = 0;
    if (page.getMaxPageNumber() == page.getNoncePage()) {
      m = page.getItems();
    } else {
      m = page.getNoncePage() * page.getMaxPageItems();
    }
    // count N
    int n = (page.getNoncePage() - 1) * page.getMaxPageItems() + 1;

    int start = m - n + 1;
    int end = n - 1;
    pageSql.append("select top ").append(start).append(" * from ( ");
    pageSql
        .append(sql)
        .append(" ) t where ")
        .append(orderItem)
        .append(" not in (select top ")
        .append(end)
        .append(" ")
        .append(orderItem);
    pageSql
        .append("  from (")
        .append(sql)
        .append(" ) tt order by ")
        .append(orderItem)
        .append(" desc ) order by ");
    pageSql.append(orderItem).append(" desc");

    List<?> list =
        this.jdbcTemplate.query(pageSql.toString(), args, new BeanPropertyRowMapper(clazz));
    return list;
  }