springboot-sharding-jdbc-mybatis-plus 简单实现水平分表

导语:

分库分表主要为:垂直分表、垂直分库、水平分表和水平分库

垂直分表:可以按查询的频次分表存字段

垂直分库:是根据业务不同,专库专用,例如订单库、用户库

水平分表:是对数据来说,根据一定策略将同一业务的数据分表来存

水平分库:和水平分表意思差不多,也是对数据来说,根据一定策略分库存数据

 

此文是本人结合springboot-sharding-jdbc-mybatis-plus 案例 自己学习分析

此次案例主要对水平分表来做

一、数据库建表

 

同一个库建两个order表 分为order_0和order_1

二、创建springboot工程

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.20</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>4.0.0-RC1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>


        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
            <version>1.18.12</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

  此次使用sharding-jdbc是4.0.0-RC1,好像版本还有点区别,暂时现有这个做

三、添加yml配置

server:
  port: 6020
spring:
  application:
    name: sharding-jdbc
  shardingsphere:
    datasource:
      names: mydb
      mydb:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/mydb?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=UTF-8
        username: root
        password: sa123QWE
    sharding:
      tables:
        order:
          key-generator:
            column: order_id
            type: SNOWFLAKE
          actual-data-nodes: mydb.order_$->{0..1} #逻辑表名,在一个库里分表:mydb.order_0,mydb.order_1
          table-strategy: #表分片策略
            inline: #行表达式分片策略
              sharding-column: order_id #分片的字段
              algorithm-expression: mydb.order_$->{order_id % 2} #分片的算法
    props:
      sql:
        show: true
  main:
    allow-bean-definition-overriding: true 这个地方好像必须要有,不然回报错


mybatis-plus:
  mapper-locations: classpath:/mapper/*.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.elco.shardingjdbc.model

四、配置mybatis-plus 

这个地方不多说,不会配的,自己百度吧

 

 五、测试

 @GetMapping("/add")
    public void add(){
        Order order = new Order();
        //order.setOrderId(1320264024483815425l);
        order.setName("apple");
        order.setPrice(50);

        orderMapper.insert(order);

        //boolean result= this.orderService.save(order);
        //System.out.println(result);
    }

 

 

 看到这个就说成功了

 

posted @ 2020-11-04 15:44  Ivin-yang  阅读(1279)  评论(0编辑  收藏  举报