From d56b886db07c73764eeaedd49df26fdee869f60e Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Thu, 8 Jun 2023 12:32:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BD=BF=E7=94=A8=20join=20=E8=81=94?= =?UTF-8?q?=E8=A1=A8=E6=9F=A5=E8=AF=A2=E4=B8=80=E4=B8=AA=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=EF=BC=8C=E6=95=B0=E6=8D=AE=E4=B8=A2=E5=A4=B1=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mybatisflex/core/BaseMapper.java | 37 +++++++++---------- .../com/mybatisflex/core/util/SqlUtil.java | 24 +++++++++++- 2 files changed, 39 insertions(+), 22 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java index 1faadd63..d2ee7087 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java @@ -1,17 +1,17 @@ -/** - * Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com). - *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. +/* + * Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com). + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package com.mybatisflex.core; @@ -345,8 +345,7 @@ public interface BaseMapper { * @return entity 数据 */ default T selectOneByQuery(QueryWrapper queryWrapper) { - List entities = selectListByQuery(queryWrapper.limit(1)); - return (entities == null || entities.isEmpty()) ? null : entities.get(0); + return SqlUtil.getSelectOneResult(selectListByQuery(queryWrapper)); } @@ -358,8 +357,7 @@ public interface BaseMapper { * @return 数据内容 */ default R selectOneByQueryAs(QueryWrapper queryWrapper, Class asType) { - List entities = selectListByQueryAs(queryWrapper.limit(1), asType); - return (entities == null || entities.isEmpty()) ? null : entities.get(0); + return SqlUtil.getSelectOneResult(selectListByQueryAs(queryWrapper, asType)); } /** @@ -495,8 +493,7 @@ public interface BaseMapper { * @return 数据量 */ default Object selectObjectByQuery(QueryWrapper queryWrapper) { - List objects = selectObjectListByQuery(queryWrapper.limit(1)); - return objects == null || objects.isEmpty() ? null : objects.get(0); + return SqlUtil.getSelectOneResult(selectObjectListByQuery(queryWrapper)); } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/SqlUtil.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/SqlUtil.java index 68267284..584263ba 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/SqlUtil.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/SqlUtil.java @@ -15,13 +15,18 @@ */ package com.mybatisflex.core.util; +import org.apache.ibatis.exceptions.TooManyResultsException; +import org.apache.ibatis.session.defaults.DefaultSqlSession; + import java.time.LocalDateTime; import java.util.Date; +import java.util.List; import java.util.regex.Matcher; public class SqlUtil { - private SqlUtil() {} + private SqlUtil() { + } public static void keepColumnSafely(String column) { if (StringUtil.isBlank(column)) { @@ -78,7 +83,7 @@ public class SqlUtil { } - public static String replaceSqlParams(String sql, Object[] params){ + public static String replaceSqlParams(String sql, Object[] params) { if (params != null && params.length > 0) { for (Object value : params) { // null @@ -108,4 +113,19 @@ public class SqlUtil { return sql; } + /** + * 搬运加改造 {@link DefaultSqlSession#selectOne(String, Object)} + */ + public static T getSelectOneResult(List list) { + if (list == null || list.isEmpty()) { + return null; + } + int size = list.size(); + if (size == 1) { + return list.get(0); + } + throw new TooManyResultsException( + "Expected one result (or null) to be returned by selectOne(), but found: " + size); + } + }