@Override
    public List<User> 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_USER, DB_USER_ID_USER, criteria, paramList, sb, AND);
                Appender.append(DAO_USER_LOGIN, DB_USER_LOGIN, criteria, paramList, sb, AND);
                Appender.append(DAO_USER_PASSWORD, DB_USER_PASSWORD, criteria, paramList, sb, AND);
                Appender.append(DAO_USER_EMAIL, DB_USER_EMAIL, criteria, paramList, sb, AND);
                Appender.append(DAO_ID_ROLE, DB_USER_ID_ROLE, criteria, paramList, sb, AND);
                Appender.append(DAO_USER_PHONE, DB_USER_PHONE, criteria, paramList, sb, AND);
                Appender.append(DAO_USER_LANGUAGE, DB_USER_LANGUAGE, criteria, paramList, sb, AND);
                Appender.append(DAO_USER_DISCOUNT, DB_USER_DISCOUNT, criteria, paramList, sb, AND);
                Appender.append(DAO_USER_BALANCE, DB_USER_BALANCE, criteria, paramList, sb, AND);
                Appender.append(DAO_USER_STATUS, DB_USER_STATUS, criteria, paramList, sb, AND);
                if (paramList.isEmpty()) {
                    return LOAD_QUERY;
                } else {
                    sb.insert(0, LOAD_QUERY);
                    Boolean forApdate = (Boolean) criteria.getParam(DAO_USER_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) -> {
                User bean = new User();
                bean.setIdUser(rs.getInt(DB_USER_ID_USER));
                bean.setLogin(rs.getString(DB_USER_LOGIN));
                bean.setEmail(rs.getString(DB_USER_EMAIL));
                bean.setRole(new Role(rs.getInt(DB_USER_ID_ROLE)));
                bean.setPhone(rs.getString(DB_USER_PHONE));
                bean.setLanguage(rs.getString(DB_USER_LANGUAGE));
                bean.setDiscount(rs.getInt(DB_USER_DISCOUNT));
                bean.setBalance(rs.getFloat(DB_USER_BALANCE));
                bean.setStatus(rs.getShort(DB_USER_STATUS));
                return bean;
            });
        } catch (DaoException ex) {
             throw new DaoQueryException(ERR_USER_LOAD, ex);
        }
    }