goja-web/src/main/java/goja/mvc/datatables/DTDao.java
public static Page<Record> paginate(Class<? extends Model> model, DTCriterias criterias) {
        int pageSize = criterias.getLength();
        int start = criterias.getStart() / pageSize + 1;

        final Table table = TableMapping.me().getTable(model);
        final String tableName = table.getName();

        final List<DTColumn> columns = criterias.getColumns();

        String sql_columns = null;
        if (!(columns == null || columns.isEmpty())) {
            StringBuilder sql_builder = new StringBuilder("SELECT ");
            boolean first = false;
            for (DTColumn column : columns) {
                if (column != null) {
                    if (first) {
                        sql_builder.append(COMMA).append(SPACE).append(column.getData());
                    } else {
                        sql_builder.append(column.getData());
                        first = true;
                    }
                }
            }
            sql_columns = sql_builder.toString();
        }

        StringBuilder where = new StringBuilder(" FROM ");
        where.append(tableName).append(SPACE);

        //        final DTSearch search = criterias.getSearch();

        final List<Triple<String, Condition, Object>> custom_params = criterias.getParams();
        final List<Object> params = Lists.newArrayList();
        appendWhereSql(params, where, custom_params);

        final List<DTOrder> order = criterias.getOrder();
        if (!(order == null || order.isEmpty())) {
            StringBuilder orderBy = new StringBuilder();
            for (DTOrder _order : order)
                orderBy.append(_order.getColumn()).append(SPACE).append(_order.getDir());
            final String byColumns = orderBy.toString();
            if (!Strings.isNullOrEmpty(byColumns)) {
                where.append(" ORDER BY ").append(byColumns);
            }
        }

        return Db.paginate(start, pageSize, sql_columns, where.toString(), params.toArray());
    }
public static Page<Record> paginate(Class<? extends Model> model, DTCriterias criterias) {
        int pageSize = criterias.getLength();
        int start = criterias.getStart() / pageSize + 1;

        final Table table = TableMapping.me().getTable(model);
        final String tableName = table.getName();

        final List<DTColumn> columns = criterias.getColumns();

        String sql_columns = null;
        if (!(columns == null || columns.isEmpty())) {
            StringBuilder sql_builder = new StringBuilder("SELECT ");
            boolean first = false;
            for (DTColumn column : columns) {
                if (column != null) {
                    if (first) {
                        sql_builder.append(COMMA).append(SPACE).append(column.getData());
                    } else {
                        sql_builder.append(column.getData());
                        first = true;
                    }
                }
            }
            sql_columns = sql_builder.toString();
        }

        StringBuilder where = new StringBuilder(" FROM ");
        where.append(tableName).append(SPACE);

        //        final DTSearch search = criterias.getSearch();

        final List<Triple<String, Condition, Object>> custom_params = criterias.getParams();
        final List<Object> params = Lists.newArrayList();
        appendWhereSql(params, where, custom_params);

        final List<DTOrder> order = criterias.getOrder();
        if (!(order == null || order.isEmpty())) {
            StringBuilder orderBy = new StringBuilder();
            for (DTOrder _order : order)
                orderBy.append(_order.getColumn()).append(SPACE).append(_order.getDir());
            final String byColumns = orderBy.toString();
            if (!Strings.isNullOrEmpty(byColumns)) {
                where.append(" ORDER BY ").append(byColumns);
            }
        }

        return Db.paginate(start, pageSize, sql_columns, where.toString(), params.toArray());
    }
public static Page < Record > paginate ( Class < ? extends Model > model , DTCriterias criterias ) { int pageSize = criterias . getLength ( ) ; int start = criterias . getStart ( ) / pageSize + 1 ; final Table table = TableMapping . me ( ) . getTable ( model ) ; final String tableName = table . getName ( ) ; final List < DTColumn > columns = criterias . getColumns ( ) ; String sql_columns = null ; if ( ! ( columns == null || columns . isEmpty ( ) ) ) { StringBuilder sql_builder = new StringBuilder ( "SELECT " ) ; boolean first = false ; for ( DTColumn column : columns ) { if ( column != null ) { if ( first ) { sql_builder . append ( COMMA ) . append ( SPACE ) . append ( column . getData ( ) ) ; } else { sql_builder . append ( column . getData ( ) ) ; first = true ; } } } sql_columns = sql_builder . toString ( ) ; } StringBuilder where = new StringBuilder ( " FROM " ) ; where . append ( tableName ) . append ( SPACE ) ; //        final DTSearch search = criterias.getSearch(); final List < Triple < String , Condition , Object > > custom_params = criterias . getParams ( ) ; final List < Object > params = Lists . newArrayList ( ) ; appendWhereSql ( params , where , custom_params ) ; final List < DTOrder > order = criterias . getOrder ( ) ; if ( ! ( order == null || order . isEmpty ( ) ) ) { StringBuilder orderBy = new StringBuilder ( ) ; for ( DTOrder _order : order ) orderBy . append ( _order . getColumn ( ) ) . append ( SPACE ) . append ( _order . getDir ( ) ) ; final String byColumns = orderBy . toString ( ) ; if ( ! Strings . isNullOrEmpty ( byColumns ) ) { where . append ( " ORDER BY " ) . append ( byColumns ) ; } } return Db . paginate ( start , pageSize , sql_columns , where . toString ( ) , params . toArray ( ) ) ; }
分页检索，默认按照id进行排序，需要指定datatables的请求参数。

@param model     实体
@param criterias 请求参数
@return 分页数据
分页检索，默认按照id进行排序，需要指定datatables的请求参数。