Model增加新的分页方法

com.jfinal.plugin.activerecord.Model

增加代码:

//------------------------------------------------------------------------------------------------------------------
/**
 * Paginate.
 * @param pageNumber the page number
 * @param pageSize the page size
 * @param sql the select part of the sql statement
 * @param paras the parameters of sql
 * @return the Page object
 */
public Page<M> paginate(int pageNumber, int pageSize, String sql, Object... paras) {
   Config config = getConfig();
   Connection conn = null;
   try {
      conn = config.getConnection();
      return doPaginate(config, conn, pageNumber, pageSize, sql, paras);
   } catch (Exception e) {
      throw new ActiveRecordException(e);
   } finally {
      config.close(conn);
   }
}

private Page<M> doPaginate(Config config, Connection conn, int pageNumber, int pageSize, String select, Object... paras) throws Exception {
   if (pageNumber < 1 || pageSize < 1) {
      throw new ActiveRecordException("pageNumber and pageSize must more than 0");
   }

   String totalRowSql = "select count(*) from (" + config.dialect.replaceOrderBy(select)+ " ) as __tmp";
   List result = Db.query(config, conn, totalRowSql, paras);
   int size = result.size();
   long totalRow  = (size > 0) ? ((Number)result.get(0)).longValue() : 0;

   if (totalRow == 0) {
      return new Page<M>(new ArrayList<M>(0), pageNumber, pageSize, 0, 0);   // totalRow = 0;
   }

   int totalPage = (int) (totalRow / pageSize);
   if (totalRow % pageSize != 0) {
      totalPage++;
   }

   if (pageNumber > totalPage) {
      return new Page<M>(new ArrayList<M>(0), pageNumber, pageSize, totalPage, (int)totalRow);
   }

   String sql = config.dialect.forPaginate(pageNumber, pageSize, select,"");
   List<M> list = find(conn, sql, paras);
   return new Page<M>(list, pageNumber, pageSize, totalPage, (int)totalRow);
}

/**
 * Paginate.
 * @param pageNumber the page number
 * @param pageSize the page size
 * @param sql the select part of the sql statement
 * @return the Page object
 */
public Page<M> paginate(int pageNumber, int pageSize, String sql) {
   return paginate(pageNumber,pageSize,sql,(Object[])null);
}
//------------------------------------------------------------------------------------------------------------------

评论区

绿色的小苹果

2016-08-09 16:29

什么 连个注释都没有

Andydmx

2016-08-10 09:15

@绿色的小苹果 这需要注释吗?

nbjgl

2016-08-10 21:47

@Andydmx 很明显需要注释,来这里逛的小白居多好不好,没有注释,宝宝表示看不懂干啥的……

nbjgl

2016-08-10 21:50

@Andydmx 感谢分享,给个注释吧……

热门分享

扫码入社