diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java index 24557edb6..07bde33a0 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java @@ -6,9 +6,11 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.reflect.GenericTypeUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.toolkit.Db; +import org.apache.ibatis.annotations.Param; import org.apache.ibatis.logging.Log; import org.apache.ibatis.logging.LogFactory; import org.dromara.common.core.utils.MapstructUtils; @@ -130,7 +132,7 @@ public interface BaseMapperPlus extends BaseMapper { * @return 查询到的单个VO对象 */ default V selectVoById(Serializable id) { - return selectVoById(id, this.currentVoClass()); + return this.selectVoById(id, this.currentVoClass()); } /** @@ -156,7 +158,7 @@ public interface BaseMapperPlus extends BaseMapper { * @return 查询到的VO对象列表 */ default List selectVoByIds(Collection idList) { - return selectVoByIds(idList, this.currentVoClass()); + return this.selectVoByIds(idList, this.currentVoClass()); } /** @@ -182,7 +184,7 @@ public interface BaseMapperPlus extends BaseMapper { * @return 查询到的VO对象列表 */ default List selectVoByMap(Map map) { - return selectVoByMap(map, this.currentVoClass()); + return this.selectVoByMap(map, this.currentVoClass()); } /** @@ -208,7 +210,7 @@ public interface BaseMapperPlus extends BaseMapper { * @return 查询到的单个VO对象 */ default V selectVoOne(Wrapper wrapper) { - return selectVoOne(wrapper, this.currentVoClass()); + return this.selectVoOne(wrapper, this.currentVoClass()); } /** @@ -219,7 +221,7 @@ public interface BaseMapperPlus extends BaseMapper { * @return 查询到的单个VO对象 */ default V selectVoOne(Wrapper wrapper, boolean throwEx) { - return selectVoOne(wrapper, this.currentVoClass(), throwEx); + return this.selectVoOne(wrapper, this.currentVoClass(), throwEx); } /** @@ -231,7 +233,7 @@ public interface BaseMapperPlus extends BaseMapper { * @return 查询到的单个VO对象,经过类型转换为指定的VO类后返回 */ default C selectVoOne(Wrapper wrapper, Class voClass) { - return selectVoOne(wrapper, voClass, true); + return this.selectVoOne(wrapper, voClass, true); } /** @@ -251,13 +253,33 @@ public interface BaseMapperPlus extends BaseMapper { return MapstructUtils.convert(obj, voClass); } + /** + * 根据条件查询单条记录(自动限制返回 1 条数据,不依赖 {@code throwEx} 参数) + * + *

+ * 注意: + * 1. 使用 {@code Page<>(1, 1)} 强制分页查询,确保 SQL 自动添加 {@code LIMIT 1},因此 {@code throwEx} 参数不再生效 + * 2. 原方法的 {@code throwEx} 逻辑(多条数据抛异常)已被优化掉,因为分页查询不会返回多条记录 + *

+ * + * @param queryWrapper 查询条件(可为 null) + * @param throwEx 是否抛出异常(已弃用,此参数不再生效) + * @return 单条记录或无数据时返回 null + */ + @Override + default T selectOne(@Param(Constants.WRAPPER) Wrapper queryWrapper, boolean throwEx) { + // 强制分页查询(LIMIT 1),确保最多返回 1 条记录 + List list = this.selectList(new Page<>(1, 1), queryWrapper); + return CollUtil.isEmpty(list) ? null : list.get(0); + } + /** * 查询所有VO对象列表 * * @return 查询到的VO对象列表 */ default List selectVoList() { - return selectVoList(new QueryWrapper<>(), this.currentVoClass()); + return this.selectVoList(new QueryWrapper<>(), this.currentVoClass()); } /** @@ -294,7 +316,7 @@ public interface BaseMapperPlus extends BaseMapper { * @return 查询到的VO对象分页列表 */ default

> P selectVoPage(IPage page, Wrapper wrapper) { - return selectVoPage(page, wrapper, this.currentVoClass()); + return this.selectVoPage(page, wrapper, this.currentVoClass()); } /**