Revert "update 优化 重写selectOne方法 自动拼接limit 1"

This reverts commit c73d3cdf89.
dev
疯狂的狮子Li 4 months ago
parent 7316d05874
commit f6ddae57c4

@ -6,21 +6,20 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
import com.baomidou.mybatisplus.core.toolkit.reflect.GenericTypeUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.toolkit.Db; import com.baomidou.mybatisplus.extension.toolkit.Db;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.logging.Log; import org.apache.ibatis.logging.Log;
import org.apache.ibatis.logging.LogFactory; import org.apache.ibatis.logging.LogFactory;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StreamUtils;
import java.io.Serializable; import java.io.Serializable;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors;
/** /**
* Mapper , * Mapper ,
@ -36,21 +35,25 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
Log log = LogFactory.getLog(BaseMapperPlus.class); Log log = LogFactory.getLog(BaseMapperPlus.class);
/** /**
* V Class * V Class
* <p>
* 使 BaseMapperPlus V Class
* *
* @return V Class * @return V Class
*/ */
default Class<V> currentVoClass() { default Class<V> currentVoClass() {
return (Class<V>) GenericTypeUtils.resolveTypeArguments(this.getClass(), BaseMapperPlus.class)[1]; return (Class<V>) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 1);
} }
/** /**
* T Class * T Class
* <p>
* 使 BaseMapperPlus T Class
* *
* @return T Class * @return T Class
*/ */
default Class<T> currentModelClass() { default Class<T> currentModelClass() {
return (Class<T>) GenericTypeUtils.resolveTypeArguments(this.getClass(), BaseMapperPlus.class)[0]; return (Class<T>) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 0);
} }
/** /**
@ -132,7 +135,7 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
* @return VO * @return VO
*/ */
default V selectVoById(Serializable id) { default V selectVoById(Serializable id) {
return this.selectVoById(id, this.currentVoClass()); return selectVoById(id, this.currentVoClass());
} }
/** /**
@ -158,7 +161,7 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
* @return VO * @return VO
*/ */
default List<V> selectVoByIds(Collection<? extends Serializable> idList) { default List<V> selectVoByIds(Collection<? extends Serializable> idList) {
return this.selectVoByIds(idList, this.currentVoClass()); return selectVoByIds(idList, this.currentVoClass());
} }
/** /**
@ -184,7 +187,7 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
* @return VO * @return VO
*/ */
default List<V> selectVoByMap(Map<String, Object> map) { default List<V> selectVoByMap(Map<String, Object> map) {
return this.selectVoByMap(map, this.currentVoClass()); return selectVoByMap(map, this.currentVoClass());
} }
/** /**
@ -210,7 +213,7 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
* @return VO * @return VO
*/ */
default V selectVoOne(Wrapper<T> wrapper) { default V selectVoOne(Wrapper<T> wrapper) {
return this.selectVoOne(wrapper, this.currentVoClass()); return selectVoOne(wrapper, this.currentVoClass());
} }
/** /**
@ -221,12 +224,11 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
* @return VO * @return VO
*/ */
default V selectVoOne(Wrapper<T> wrapper, boolean throwEx) { default V selectVoOne(Wrapper<T> wrapper, boolean throwEx) {
return this.selectVoOne(wrapper, this.currentVoClass(), throwEx); return selectVoOne(wrapper, this.currentVoClass(), throwEx);
} }
/** /**
* VOVO( limit 1) * VOVO
* limit 1
* *
* @param wrapper Wrapper * @param wrapper Wrapper
* @param voClass VOClass * @param voClass VOClass
@ -234,12 +236,15 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
* @return VOVO * @return VOVO
*/ */
default <C> C selectVoOne(Wrapper<T> wrapper, Class<C> voClass) { default <C> C selectVoOne(Wrapper<T> wrapper, Class<C> voClass) {
return this.selectVoOne(wrapper, voClass, true); T obj = this.selectOne(wrapper);
if (ObjectUtil.isNull(obj)) {
return null;
}
return MapstructUtils.convert(obj, voClass);
} }
/** /**
* VO( limit 1) * VO
* limit 1
* *
* @param wrapper Wrapper * @param wrapper Wrapper
* @param voClass VOClass * @param voClass VOClass
@ -255,33 +260,13 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
return MapstructUtils.convert(obj, voClass); return MapstructUtils.convert(obj, voClass);
} }
/**
* limit 1 1 {@code throwEx}
* limit 1
* <p>
* <strong></strong>
* 1. 使 {@code Page<>(1, 1)} SQL {@code LIMIT 1} {@code throwEx}
* 2. {@code throwEx}
* </p>
*
* @param queryWrapper null
* @param throwEx <del></del>
* @return null
*/
@Override
default T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper, boolean throwEx) {
// 强制分页查询LIMIT 1确保最多返回 1 条记录
List<T> list = this.selectList(new Page<>(1, 1), queryWrapper);
return CollUtil.isEmpty(list) ? null : list.get(0);
}
/** /**
* VO * VO
* *
* @return VO * @return VO
*/ */
default List<V> selectVoList() { default List<V> selectVoList() {
return this.selectVoList(new QueryWrapper<>(), this.currentVoClass()); return selectVoList(new QueryWrapper<>(), this.currentVoClass());
} }
/** /**
@ -318,7 +303,7 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
* @return VO * @return VO
*/ */
default <P extends IPage<V>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper) { default <P extends IPage<V>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper) {
return this.selectVoPage(page, wrapper, this.currentVoClass()); return selectVoPage(page, wrapper, this.currentVoClass());
} }
/** /**
@ -352,7 +337,7 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
* @return * @return
*/ */
default <C> List<C> selectObjs(Wrapper<T> wrapper, Function<? super Object, C> mapper) { default <C> List<C> selectObjs(Wrapper<T> wrapper, Function<? super Object, C> mapper) {
return StreamUtils.toList(this.selectObjs(wrapper), mapper); return this.selectObjs(wrapper).stream().filter(Objects::nonNull).map(mapper).collect(Collectors.toList());
} }
} }

Loading…
Cancel
Save