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