導語:
分庫分表主要為:垂直分表、垂直分庫、水平分表和水平分庫
垂直分表:可以按查詢的頻次分表存字段
垂直分庫:是根據業務不同,專庫專用,例如訂單庫、用戶庫
水平分表:是對數據來說,根據一定策略將同一業務的數據分表來存
水平分庫:和水平分表意思差不多,也是對數據來說,根據一定策略分庫存數據
此文是本人結合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);
}

看到這個就說成功了
