miemie 4 years ago
parent
commit
9946e25627

+ 0 - 89
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/sharding/ShardingConfig.java

@@ -1,89 +0,0 @@
-package com.baomidou.mybatisplus.test.h2.sharding;
-
-import java.util.List;
-import java.util.Map;
-
-import javax.sql.DataSource;
-
-import org.apache.ibatis.session.ExecutorType;
-import org.apache.ibatis.session.SqlSessionFactory;
-import org.apache.ibatis.type.EnumOrdinalTypeHandler;
-import org.apache.ibatis.type.JdbcType;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.io.ResourceLoader;
-import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.core.MybatisConfiguration;
-import com.baomidou.mybatisplus.core.config.GlobalConfig;
-import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
-import com.baomidou.mybatisplus.extension.plugins.handler.sharding.ShardingProcessor;
-import com.baomidou.mybatisplus.extension.plugins.handler.sharding.ShardingRuleEnum;
-import com.baomidou.mybatisplus.extension.plugins.handler.sharding.ShardingStrategy;
-import com.baomidou.mybatisplus.extension.plugins.inner.ShardingInnerInterceptor;
-import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
-
-/**
- * @author zengzhihong
- */
-@Configuration
-@MapperScan("com.baomidou.mybatisplus.test.h2.sharding.mapper")
-public class ShardingConfig {
-
-
-    @Bean("mybatisSqlSession")
-    public SqlSessionFactory sqlSessionFactory(DataSource dataSource, ResourceLoader resourceLoader,
-                                               GlobalConfig globalConfig) throws Exception {
-        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
-        sqlSessionFactory.setDataSource(dataSource);
-//        sqlSessionFactory.setConfigLocation(resourceLoader.getResource("classpath:mybatis-config-object-factory
-//        .xml"));
-        MybatisConfiguration configuration = new MybatisConfiguration();
-//        configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
-//        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
-        configuration.setJdbcTypeForNull(JdbcType.NULL);
-        /*
-         * 下划线转驼峰开启
-         */
-        configuration.setMapUnderscoreToCamelCase(true);
-        configuration.setDefaultExecutorType(ExecutorType.REUSE);
-        configuration.setDefaultEnumTypeHandler(EnumOrdinalTypeHandler.class);  //默认枚举处理
-        sqlSessionFactory.setConfiguration(configuration);
-        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
-                .getResources("classpath:/sharding/*.xml"));
-        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
-
-        final ShardingStrategy orderShardingHashStrategy = new ShardingStrategy("sharding_order", "order_id", ShardingRuleEnum.ABSOLUTE, OrderShardingProcessor.class);
-
-        interceptor.addInnerInterceptor(new ShardingInnerInterceptor(orderShardingHashStrategy));
-        sqlSessionFactory.setPlugins(interceptor);
-        return sqlSessionFactory.getObject();
-    }
-
-    static class OrderShardingProcessor implements ShardingProcessor {
-
-        @Override
-        public String doSharding(ShardingStrategy strategy, Map<String, List<Object>> shardingValues) {
-            final List<Object> values = shardingValues.get("order_id");
-            // value是一个集合 比如 in查询
-            // 不管有几个value 此处最终return一个真实表名
-            // 未携带分配字段会报错 所以shardingValues 一定是 notEmpty
-            return "sharding_order_" + String.format("%02d", ((Long) values.get(0) % 3 + 1));
-        }
-    }
-
-
-    @Bean
-    public GlobalConfig globalConfiguration() {
-        GlobalConfig conf = new GlobalConfig();
-        conf.setEnableSqlRunner(true)
-                .setDbConfig(new GlobalConfig.DbConfig()
-                        .setLogicDeleteValue("1")
-                        .setLogicNotDeleteValue("0")
-                        .setIdType(IdType.ID_WORKER));
-        return conf;
-    }
-
-}

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

@@ -1,127 +0,0 @@
-package com.baomidou.mybatisplus.test.h2.sharding;
-
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.ibatis.logging.Log;
-import org.apache.ibatis.logging.LogFactory;
-import org.junit.jupiter.api.MethodOrderer;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.TestMethodOrder;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit.jupiter.SpringExtension;
-
-import com.baomidou.mybatisplus.core.enums.SqlMethod;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
-import com.baomidou.mybatisplus.test.h2.sharding.mapper.ShardingOrderMapper;
-import com.baomidou.mybatisplus.test.h2.sharding.model.ShardingOrder;
-
-/**
- * @author zengzhihong
- */
-@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
-@ExtendWith(SpringExtension.class)
-@ContextConfiguration(locations = {"classpath:h2/spring-sharding-h2.xml"})
-public class ShardingTest {
-
-    private Log log = LogFactory.getLog(getClass());
-
-    @Autowired
-    ShardingOrderMapper shardingOrderMapper;
-
-    private final LocalDateTime date1 = LocalDateTime.of(2021, 1, 1, 0, 0, 0);
-    private final LocalDateTime date2 = LocalDateTime.of(2021, 2, 1, 0, 0, 0);
-    private final LocalDateTime date3 = LocalDateTime.of(2021, 3, 1, 0, 0, 0);
-
-    @Test
-    void insertTest() {
-        ShardingOrder shardingOrder1 =
-                new ShardingOrder().setOrderId(1L).setSubject("test1").setCreateTime(date1);
-        shardingOrderMapper.insert(shardingOrder1);
-        shardingOrderMapper.insert1(2L);
-    }
-
-    @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);
-    }
-
-}

+ 3 - 4
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/sharding/model/ShardingOrder.java → mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/sharding/ShardingOrder.java

@@ -1,12 +1,11 @@
-package com.baomidou.mybatisplus.test.h2.sharding.model;
-
-import java.time.LocalDateTime;
+package com.baomidou.mybatisplus.test.sharding;
 
 import com.baomidou.mybatisplus.annotation.TableId;
-
 import lombok.Data;
 import lombok.experimental.Accessors;
 
+import java.time.LocalDateTime;
+
 /**
  * @author miemie
  * @since 2020-06-24

+ 1 - 4
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/sharding/mapper/ShardingOrderMapper.java → mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/sharding/ShardingOrderMapper.java

@@ -1,7 +1,6 @@
-package com.baomidou.mybatisplus.test.h2.sharding.mapper;
+package com.baomidou.mybatisplus.test.sharding;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.test.h2.sharding.model.ShardingOrder;
 import org.apache.ibatis.annotations.Param;
 
 /**
@@ -10,6 +9,4 @@ import org.apache.ibatis.annotations.Param;
 public interface ShardingOrderMapper extends BaseMapper<ShardingOrder> {
 
     int insert1(@Param("orderId") Long orderId);
-
-
 }

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

@@ -0,0 +1,162 @@
+package com.baomidou.mybatisplus.test.sharding;
+
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.handler.sharding.ShardingProcessor;
+import com.baomidou.mybatisplus.extension.plugins.handler.sharding.ShardingRuleEnum;
+import com.baomidou.mybatisplus.extension.plugins.handler.sharding.ShardingStrategy;
+import com.baomidou.mybatisplus.extension.plugins.inner.ShardingInnerInterceptor;
+import com.baomidou.mybatisplus.test.BaseDbTest;
+import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.plugin.Interceptor;
+import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestMethodOrder;
+
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author zengzhihong
+ */
+@Slf4j
+@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
+public class ShardingTest extends BaseDbTest<ShardingOrderMapper> {
+
+    private final LocalDateTime date1 = LocalDateTime.of(2021, 1, 1, 0, 0, 0);
+    private final LocalDateTime date2 = LocalDateTime.of(2021, 2, 1, 0, 0, 0);
+    private final LocalDateTime date3 = LocalDateTime.of(2021, 3, 1, 0, 0, 0);
+
+    @Test
+    void insertTest() {
+        ShardingOrder shardingOrder1 = new ShardingOrder().setOrderId(1L).setSubject("test1").setCreateTime(date1);
+        doTestAutoCommit(i -> {
+            i.insert(shardingOrder1);
+            i.insert1(2L);
+        });
+    }
+
+//    @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();
+        final ShardingStrategy orderShardingHashStrategy = new ShardingStrategy("sharding_order",
+            "order_id", ShardingRuleEnum.ABSOLUTE, OrderShardingProcessor.class);
+        interceptor.addInnerInterceptor(new ShardingInnerInterceptor(orderShardingHashStrategy));
+        return Collections.singletonList(interceptor);
+    }
+
+    @Override
+    protected List<String> tableSql() {
+        return Lists.newArrayList("CREATE TABLE IF NOT EXISTS sharding_order_01\n" +
+                "            (\n" +
+                "                order_id     BIGINT(20)  NOT NULL AUTO_INCREMENT,\n" +
+                "                subject   VARCHAR(30) NULL DEFAULT NULL,\n" +
+                "                create_time  DATETIME      NULL,\n" +
+                "                PRIMARY KEY (order_id)\n" +
+                "            )",
+            "CREATE TABLE IF NOT EXISTS sharding_order_02\n" +
+                "        (\n" +
+                "            order_id     BIGINT(20)  NOT NULL AUTO_INCREMENT,\n" +
+                "            subject   VARCHAR(30) NULL DEFAULT NULL,\n" +
+                "            create_time  DATETIME      NULL,\n" +
+                "        PRIMARY KEY (order_id)\n" +
+                ")",
+            "CREATE TABLE IF NOT EXISTS sharding_order_03\n" +
+                "        (\n" +
+                "            order_id     BIGINT(20)  NOT NULL AUTO_INCREMENT,\n" +
+                "            subject   VARCHAR(30) NULL DEFAULT NULL,\n" +
+                "            create_time  DATETIME      NULL,\n" +
+                "        PRIMARY KEY (order_id)\n" +
+                ")");
+    }
+
+    static class OrderShardingProcessor implements ShardingProcessor {
+
+        @Override
+        public String doSharding(ShardingStrategy strategy, Map<String, List<Object>> shardingValues) {
+            final List<Object> values = shardingValues.get("order_id");
+            // value是一个集合 比如 in查询
+            // 不管有几个value 此处最终return一个真实表名
+            // 未携带分配字段会报错 所以shardingValues 一定是 notEmpty
+            return "sharding_order_" + String.format("%02d", ((Long) values.get(0) % 3 + 1));
+        }
+    }
+}

+ 2 - 4
mybatis-plus/src/test/resources/sharding/ShardingOrderMapper.xml → mybatis-plus/src/test/resources/com/baomidou/mybatisplus/test/sharding/ShardingOrderMapper.xml

@@ -1,11 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
-<mapper namespace="com.baomidou.mybatisplus.test.h2.sharding.mapper.ShardingOrderMapper">
+<mapper namespace="com.baomidou.mybatisplus.test.sharding.ShardingOrderMapper">
     <!-- 一定要携带分片字段 -->
     <insert id="insert1">
-        INSERT INTO sharding_order (order_id,subject,create_time)
+        INSERT INTO sharding_order (order_id, subject, create_time)
         VALUES (#{orderId}, '2', '2021-01-01 00:00:00')
     </insert>
-
-
 </mapper>

+ 0 - 23
mybatis-plus/src/test/resources/sharding/sharding_order.ddl.sql

@@ -1,23 +0,0 @@
-CREATE TABLE IF NOT EXISTS sharding_order_01
-(
-    order_id     BIGINT(20)  NOT NULL AUTO_INCREMENT,
-    subject   VARCHAR(30) NULL DEFAULT NULL,
-    create_time  DATETIME      NULL,
-    PRIMARY KEY (order_id)
-);
-
-CREATE TABLE IF NOT EXISTS sharding_order_02
-(
-    order_id     BIGINT(20)  NOT NULL AUTO_INCREMENT,
-    subject   VARCHAR(30) NULL DEFAULT NULL,
-    create_time  DATETIME      NULL,
-    PRIMARY KEY (order_id)
-);
-
-CREATE TABLE IF NOT EXISTS sharding_order_03
-(
-    order_id     BIGINT(20)  NOT NULL AUTO_INCREMENT,
-    subject   VARCHAR(30) NULL DEFAULT NULL,
-    create_time  DATETIME      NULL,
-    PRIMARY KEY (order_id)
-);