导语:
分库分表主要为:垂直分表、垂直分库、水平分表和水平分库
垂直分表:可以按查询的频次分表存字段
垂直分库:是根据业务不同,专库专用,例如订单库、用户库
水平分表:是对数据来说,根据一定策略将同一业务的数据分表来存
水平分库:和水平分表意思差不多,也是对数据来说,根据一定策略分库存数据
此文是本人结合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); }
看到这个就说成功了