code: public <T> Optional<T> findFirst(final Class<T> targetClass, Collection<String> selectColumnNames, Condition whereClause, String orderBy) {
          final List<T> resultList = list(targetClass, selectColumnNames, whereClause, orderBy, 0, 1);
  
          return N.isNullOrEmpty(resultList) ? (Optional<T>) Optional.empty() : Optional.of(resultList.get(0));
      }
docs: Just fetch the result in the 1st row. {@code null} is returned if no result is found. This method will try to
  convert the column values to the type of mapping entity property if the mapping entity property is not assignable
  from column value.
  
  @param targetClass an entity class with getter/setter methods.
  @param selectColumnNames
  @param whereClause Only binary(=, <>, like, IS NULL ...)/between/junction(or, and...) are supported.
  @param orderby How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself). Passing null will use the default sort order, which may be unordered.
  @return