ソースを参照

Merge branch '3.0' into github3.0

hubin 4 年 前
コミット
cae1bf0caf

+ 9 - 8
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/mapper/BaseMapper.java

@@ -15,17 +15,18 @@
  */
 package com.baomidou.mybatisplus.core.mapper;
 
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ibatis.annotations.Param;
+
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
-import org.apache.ibatis.annotations.Param;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
 
 /*
 
@@ -165,14 +166,14 @@ public interface BaseMapper<T> extends Mapper<T> {
 
     /**
      * 根据 entity 条件,查询一条记录
-     * <p>请自行保存只能查询一条记录,例如 qw.last("limit 1") 限制取一条记录</p>
+     * <p>查询一条记录,例如 qw.last("limit 1") 限制取一条记录, 注意:多条数据会报异常</p>
      *
      * @param queryWrapper 实体对象封装操作类(可以为 null)
      */
     default T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper) {
         List<T> ts = this.selectList(queryWrapper);
         if (CollectionUtils.isNotEmpty(ts)) {
-            if (ts.size() > 1) {
+            if (ts.size() != 1) {
                 throw ExceptionUtils.mpe("One record is expected, but the query result is multiple records");
             }
             return ts.get(0);

+ 9 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/ShardingInnerInterceptor.java

@@ -42,10 +42,17 @@ import org.apache.ibatis.mapping.ParameterMode;
 import org.apache.ibatis.reflection.MetaObject;
 
 import java.sql.Connection;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
+ * 分表拦截器
+ * <p>不支持带参数子查询 不支持复杂SQL 单个Statement只能返回一个真实表名</p>
+ *
  * @author zengzhihong
  * @since 2021-01-14
  */
@@ -61,6 +68,7 @@ public class ShardingInnerInterceptor extends JsqlParserSupport implements Inner
     public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) {
         PluginUtils.MPStatementHandler mpSh = PluginUtils.mpStatementHandler(sh);
         final Executor executor = mpSh.executor();
+        // BatchExecutor或者ReuseExecutor 由beforeGetBoundSql方法已经处理过了
         if (executor instanceof BatchExecutor || executor instanceof ReuseExecutor) {
             return;
         }

+ 0 - 76
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/sharding/ShardingTest.java

@@ -70,82 +70,6 @@ public class ShardingTest extends BaseDbTest<ShardingOrderMapper> {
         });
     }
 
-//    @Test
-//    void insertBatchTest() {
-//        ShardingOrder shardingOrder1 =
-//            new ShardingOrder().setOrderId(1L).setSubject("test1").setCreateTime(date1);
-//        ShardingOrder shardingOrder2 =
-//            new ShardingOrder().setOrderId(2L).setSubject("test2").setCreateTime(date2);
-//        ShardingOrder shardingOrder3 =
-//            new ShardingOrder().setOrderId(3L).setSubject("test3").setCreateTime(date3);
-//        List<ShardingOrder> list = new ArrayList<>();
-//        list.add(shardingOrder1);
-//        list.add(shardingOrder2);
-//        list.add(shardingOrder3);
-//        String sqlStatement = SqlHelper.getSqlStatement(ShardingOrderMapper.class, SqlMethod.INSERT_ONE);
-//        SqlHelper.executeBatch(ShardingOrder.class, log, list, 1000,
-//            (sqlSession, entity) -> sqlSession.insert(sqlStatement, entity));
-//
-//    }
-
-//    @Test
-//    void selectTest() {
-//        insertBatchTest();
-//        shardingOrderMapper.selectPage(new Page<>(),
-//            Wrappers.<ShardingOrder>lambdaQuery().eq(ShardingOrder::getOrderId, 1L));
-//
-//        Map<String, Object> params = new HashMap<>();
-//        params.put("order_id", 1L);
-//        params.put("create_time", date1);
-//        shardingOrderMapper.selectByMap(params);
-//
-//        shardingOrderMapper.selectById(1L);
-//
-//        shardingOrderMapper.selectList(Wrappers.<ShardingOrder>lambdaQuery().eq(ShardingOrder::getCreateTime, date1)
-//            .in(ShardingOrder::getOrderId, Arrays.asList(1L, 2L)));
-//
-//        shardingOrderMapper.selectMaps(Wrappers.<ShardingOrder>lambdaQuery().in(ShardingOrder::getOrderId, 3L
-//        ).eq(ShardingOrder::getCreateTime,
-//            date1));
-//
-//        shardingOrderMapper.selectBatchIds(Arrays.asList(1L, 2L));
-//
-//        final Integer count =
-//            shardingOrderMapper.selectCount(Wrappers.<ShardingOrder>lambdaQuery().eq(ShardingOrder::getOrderId, 1L
-//            ).eq(ShardingOrder::getCreateTime,
-//                date1));
-//
-//        shardingOrderMapper.selectMapsPage(new Page<>(),
-//            Wrappers.<ShardingOrder>lambdaQuery().eq(ShardingOrder::getOrderId, 1L));
-//
-//        shardingOrderMapper.selectOne(Wrappers.<ShardingOrder>lambdaQuery().eq(ShardingOrder::getOrderId, 1L));
-//
-//        shardingOrderMapper.selectPage(new Page<>(),
-//            Wrappers.<ShardingOrder>lambdaQuery().eq(ShardingOrder::getOrderId, 1L));
-//
-//    }
-//
-//
-//    @Test
-//    void updateTest() {
-//        ShardingOrder order = new ShardingOrder();
-//        order.setOrderId(1L);
-//        order.setSubject("66");
-//        shardingOrderMapper.update(order, Wrappers.<ShardingOrder>lambdaQuery().eq(ShardingOrder::getOrderId, 1L));
-//        shardingOrderMapper.updateById(order);
-//    }
-//
-//    @Test
-//    void deleteTest() {
-//        shardingOrderMapper.delete(Wrappers.<ShardingOrder>lambdaQuery().eq(ShardingOrder::getOrderId, 1L));
-//        shardingOrderMapper.deleteById(1L);
-//        shardingOrderMapper.deleteBatchIds(Arrays.asList(1L, 2L));
-//        Map<String, Object> params = new HashMap<>();
-//        params.put("order_id", 1L);
-//        shardingOrderMapper.deleteByMap(params);
-//    }
-
-
     @Override
     protected List<Interceptor> interceptors() {
         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();