code: public AnimaQuery<T> join(JoinParam joinParam) {
          ifNullThrow(joinParam,
                  new AnimaException("Join param not null"));
  
          ifNullThrow(joinParam.getJoinModel(),
                  new AnimaException("Join param [model] not null"));
  
          ifNullThrow(AnimaUtils.isEmpty(joinParam.getFieldName()),
                  new AnimaException("Join param [as] not empty"));
  
          ifNullThrow(AnimaUtils.isEmpty(joinParam.getOnLeft()),
                  new AnimaException("Join param [onLeft] not empty"));
  
          ifNullThrow(AnimaUtils.isEmpty(joinParam.getOnRight()),
                  new AnimaException("Join param [onRight] not empty"));
  
          this.joinParams.add(joinParam);
          return this;
      }
docs: Add a cascading query.
  
  @param joinParam Join params
  @return AnimaQuery