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);
    }

 

 

 看到這個就說成功了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM