@Override
    public List<Tour> load(Criteria criteria, GenericLoadQuery loadGeneric, Connection conn) throws DaoQueryException {
        int pageSize = 10;

        List paramList = new ArrayList<>();
        StringBuilder sb = new StringBuilder(WHERE);
        String queryStr = new QueryMapper() {
            @Override
            public String mapQuery() {
                Appender.append(DAO_ID_TOUR, DB_TOUR_ID_TOUR, criteria, paramList, sb, AND);
                Appender.append(DAO_ID_DIRECTION, DB_TOUR_ID_DIRECTION, criteria, paramList, sb, AND);
                Appender.append(DAO_TOUR_DATE, DB_TOUR_DATE, criteria, paramList, sb, AND);
                Appender.append(DAO_TOUR_DAYS, DB_TOUR_DAYS_COUNT, criteria, paramList, sb, AND);
                Appender.append(DAO_TOUR_PRICE, DB_TOUR_PRICE, criteria, paramList, sb, AND);
                Appender.append(DAO_TOUR_DISCOUNT, DB_TOUR_DISCOUNT, criteria, paramList, sb, AND);
                Appender.append(DAO_TOUR_TOTAL_SEATS, DB_TOUR_TOTAL_SEATS, criteria, paramList, sb, AND);
                Appender.append(DAO_TOUR_FREE_SEATS, DB_TOUR_FREE_SEATS, criteria, paramList, sb, AND);
                Appender.append(DAO_TOUR_STATUS, DB_TOUR_STATUS, criteria, paramList, sb, AND);
                Appender.append(DAO_TOUR_DATE_FROM, DB_TOUR_DATE, criteria, paramList, sb, AND, FROM);
                Appender.append(DAO_TOUR_DATE_TO, DB_TOUR_DATE, criteria, paramList, sb, AND, TO);
                if (paramList.isEmpty()) {
                    return LOAD_QUERY;
                } else {
                    sb.insert(0, LOAD_QUERY);
                    Boolean forApdate = (Boolean) criteria.getParam(DAO_TOUR_SELECT_FOR_UPDATE);
                    if (forApdate != null && forApdate) {
                        sb.append(LOCK_QUERY);
                    }
                    return sb.toString();
                }
            }
        }.mapQuery();

        try {
            return loadGeneric.sendQuery(queryStr, paramList.toArray(), pageSize, conn, (ResultSet rs, int rowNum) -> {
                Tour bean = new Tour();
                bean.setIdTour(rs.getInt(DB_TOUR_ID_TOUR));
                bean.setDepartDate(rs.getDate(DB_TOUR_DATE));
                bean.setDaysCount(rs.getInt(DB_TOUR_DAYS_COUNT));
                bean.setPrice(rs.getFloat(DB_TOUR_PRICE));
                bean.setDiscount(rs.getInt(DB_TOUR_DISCOUNT));
                bean.setTotalSeats(rs.getInt(DB_TOUR_TOTAL_SEATS));
                bean.setFreeSeats(rs.getInt(DB_TOUR_FREE_SEATS));
                bean.setDirection(new Direction(rs.getInt(DB_TOUR_ID_DIRECTION)));
                bean.setStatus(rs.getShort(DB_TOUR_STATUS));
                return bean;
            });
        } catch (DaoException ex) {
             throw new DaoQueryException(ERR_TOUR_LOAD, ex);
        }
    }