![JAR search and dependency download from the Maven repository](/logo.png)
org.zodiac.mybatisplus.binding.binder.remote.RemoteBindQueryExecutor Maven / Gradle / Ivy
package org.zodiac.mybatisplus.binding.binder.remote;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.zodiac.commons.api.R;
import org.zodiac.commons.api.ResultCodeEnum;
import org.zodiac.commons.util.BeanUtil;
import org.zodiac.commons.util.Colls;
import org.zodiac.commons.util.serialize.JsonUtil;
import org.zodiac.mybatisplus.base.BaseService;
import org.zodiac.mybatisplus.binding.cache.BindingCacheManager;
import org.zodiac.mybatisplus.binding.helper.WrapperHelper;
import org.zodiac.mybatisplus.binding.parser.PropInfo;
import org.zodiac.mybatisplus.util.MyBatisPlusSpringBootUtil;
import org.zodiac.mybatisplus.util.MyBatisPlusUtil;
import org.zodiac.sdk.toolkit.util.ClassLoaderUtil;
/**
* 远程绑定查询执行器。
*
*/
public class RemoteBindQueryExecutor {
private static Logger log = LoggerFactory.getLogger(RemoteBindQueryExecutor.class);
private RemoteBindQueryExecutor() {
super();
}
/**
* 执行查询返回绑定数据。
*
* @param remoteBindDTO 绑定DTO
* @return 结果
*/
public static R execute(RemoteBindDTO remoteBindDTO) {
Class entityClass = null;
try {
entityClass = ClassLoaderUtil.loadClass(remoteBindDTO.getEntityClassName());
} catch (Exception e) {
String msg = "模块下无Entity类: " + remoteBindDTO.getEntityClassName();
log.error(msg, e);
return R.fail(ResultCodeEnum.PARAM_VALID_ERROR, msg);
}
Collection> inConditionValues = remoteBindDTO.getInConditionValues();
if (inConditionValues == null) {
return R.success();
}
if (inConditionValues.isEmpty()) {
return R.successWithData(Collections.emptyList());
}
/*关联主键列名。*/
String refJoinCol = remoteBindDTO.getRefJoinCol();
PropInfo propInfo = BindingCacheManager.getPropInfoByClass(entityClass);
Class idFieldType = propInfo.getFieldTypeByColumn(refJoinCol);
Collection> formatInValues = BeanUtil.convertIdValuesToType(inConditionValues, idFieldType);
/*构建queryWrpper。*/
QueryWrapper> queryWrapper = new QueryWrapper<>();
queryWrapper.setEntityClass(entityClass);
queryWrapper.select(remoteBindDTO.getSelectColumns());
/*构建查询条件。*/
queryWrapper.in(refJoinCol, formatInValues);
queryWrapper.and(Colls.notEmptyColl(remoteBindDTO.getAdditionalConditions()),
e -> remoteBindDTO.getAdditionalConditions().forEach(e::apply));
/*排序。*/
WrapperHelper.buildOrderBy(queryWrapper, remoteBindDTO.getOrderBy(), e -> e);
/*执行查询返回结果List。*/
try {
String jsonStr = null;
if ("Map".equals(remoteBindDTO.getResultType())) {
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy