Forráskód Böngészése

修正service 的getOne 方法

miemie 6 éve
szülő
commit
a8a20da87e

+ 19 - 13
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlHelper.java

@@ -15,12 +15,8 @@
  */
 package com.baomidou.mybatisplus.core.toolkit.sql;
 
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.metadata.TableInfo;
-import com.baomidou.mybatisplus.core.toolkit.*;
-import org.apache.ibatis.exceptions.TooManyResultsException;
+import java.util.List;
+
 import org.apache.ibatis.logging.Log;
 import org.apache.ibatis.logging.LogFactory;
 import org.apache.ibatis.session.ExecutorType;
@@ -28,7 +24,16 @@ import org.apache.ibatis.session.SqlSession;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.mybatis.spring.SqlSessionUtils;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
+import com.baomidou.mybatisplus.core.toolkit.Assert;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
 
 /**
  * <p>
@@ -73,7 +78,7 @@ public final class SqlHelper {
      * 获取Session
      * </p>
      *
-     * @param clazz 实体类
+     * @param clazz      实体类
      * @return SqlSession
      */
     public static SqlSession sqlSession(Class<?> clazz) {
@@ -140,13 +145,14 @@ public final class SqlHelper {
      * @return
      */
     public static <E> E getObject(List<E> list) {
-        if (list.size() == 1) {
+        if (CollectionUtils.isNotEmpty(list)) {
+            int size = list.size();
+            if (size > 1) {
+                SqlHelper.logger.warn(String.format("Warn: execute Method There are  %s results.", size));
+            }
             return list.get(0);
-        } else if (list.size() > 1) {
-            throw new TooManyResultsException("Expected one result (or null) to be returned by selectOne(), but found: " + list.size());
-        } else {
-            return null;
         }
+        return null;
     }
 
     /**

+ 13 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/service/IService.java

@@ -197,7 +197,19 @@ public interface IService<T> {
      *
      * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
      */
-    T getOne(Wrapper<T> queryWrapper);
+    default T getOne(Wrapper<T> queryWrapper) {
+        return getOne(queryWrapper, false);
+    }
+
+    /**
+     * <p>
+     * 根据 Wrapper,查询一条记录
+     * </p>
+     *
+     * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
+     * @param throwEx      有多个 result 是否抛出异常
+     */
+    T getOne(Wrapper<T> queryWrapper, boolean throwEx);
 
     /**
      * <p>

+ 16 - 12
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/service/impl/ServiceImpl.java

@@ -22,7 +22,6 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
-import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
 import org.apache.ibatis.binding.MapperMethod;
 import org.apache.ibatis.session.SqlSession;
 import org.mybatis.spring.SqlSessionUtils;
@@ -37,6 +36,7 @@ import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
+import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -85,15 +85,16 @@ public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
     protected SqlSession sqlSessionBatch() {
         return SqlHelper.sqlSessionBatch(currentModelClass());
     }
-    
+
     /**
      * 释放sqlSession
+     *
      * @param sqlSession session
      */
-    protected void closeSqlSession(SqlSession sqlSession){
+    protected void closeSqlSession(SqlSession sqlSession) {
         SqlSessionUtils.closeSqlSession(sqlSession, GlobalConfigUtils.currentSessionFactory(currentModelClass()));
     }
-    
+
     /**
      * 获取SqlStatement
      *
@@ -137,7 +138,7 @@ public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
                 i++;
             }
             batchSqlSession.flushStatements();
-        }finally {
+        } finally {
             closeSqlSession(batchSqlSession);
         }
         return true;
@@ -191,7 +192,7 @@ public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
         int i = 0;
         try {
             for (T anEntityList : entityList) {
-                if(i == 0){
+                if (i == 0) {
                     cls = anEntityList.getClass();
                     tableInfo = TableInfoHelper.getTableInfo(cls);
                 }
@@ -199,8 +200,8 @@ public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
                     Object idVal = ReflectionKit.getMethodValue(cls, anEntityList, tableInfo.getKeyProperty());
                     if (StringUtils.checkValNull(idVal)) {
                         String sqlStatement = sqlStatement(SqlMethod.INSERT_ONE);
-                        batchSqlSession.insert(sqlStatement,anEntityList);
-                    }else{
+                        batchSqlSession.insert(sqlStatement, anEntityList);
+                    } else {
                         String sqlStatement = sqlStatement(SqlMethod.UPDATE_BY_ID);
                         MapperMethod.ParamMap<T> param = new MapperMethod.ParamMap<>();
                         param.put(Constants.ENTITY, anEntityList);
@@ -211,11 +212,11 @@ public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
                         batchSqlSession.flushStatements();
                     }
                     i++;
-                }else {
+                } else {
                     throw ExceptionUtils.mpe("Error:  Can not execute. Could not find @TableId.");
                 }
             }
-        }finally {
+        } finally {
             closeSqlSession(batchSqlSession);
         }
         return true;
@@ -280,7 +281,7 @@ public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
                 i++;
             }
             batchSqlSession.flushStatements();
-        }finally {
+        } finally {
             closeSqlSession(batchSqlSession);
         }
         return true;
@@ -302,7 +303,10 @@ public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
     }
 
     @Override
-    public T getOne(Wrapper<T> queryWrapper) {
+    public T getOne(Wrapper<T> queryWrapper, boolean throwEx) {
+        if (throwEx) {
+            return baseMapper.selectOne(queryWrapper);
+        }
         return SqlHelper.getObject(baseMapper.selectList(queryWrapper));
     }