上两篇文章讲到了两种分库分表的方式,这两种方式可以归结为一种类型,都是通过配置的形式来分片数据。本文我们继续讲解一种新的方式来分片数据,除了配置的形式外,shardingjdbc还支持通过代码来自定义规则。
自定义规则
之前我们实现了id取模和按日期分库分表,这里我们为了展示技术,还是继续按照日期分表,不过这里通过代码来自定义。在开始写代码之前,我们先将分库分表规则定义好。
这里我们建立两个库ds0,ds1。每个库建立表t_order2021、t_order2022两个表,语句如下:
1 | sql复制代码CREATE TABLE `t_order2021` ( |
搭建工程
基本环境准备好了,我们就可以开始我们的工程搭建了。这里搭建一个springboot工程,然后整合mybatis和shardingjdbc。具体依赖如下:
1 | xml复制代码<properties> |
上手sharding配置
添加mybatis和shardingjdbc的配置
1 | properties复制代码server.port=10080 |
启动类上添加mybatis的mapper扫描配置@MapperScan(“com.example.test.dao”)
在以上配置中,我们定义了自定义配置的类路径,接下来我们会去编写这两个自定义配置的内容。
编写自定义规则类
在文章开头我们就已经定义了规则,现在我们来实现这个规则。根据我们的规则我们可以选择精确分片算法来实现,具体代码如下:
1 | java复制代码package com.example.test.config; |
1 | java复制代码package com.example.test.config; |
上测试代码
按照之前文章的套路,我们写点测试代码,代码如下:
1 | java复制代码package com.example.test.controller; |
完成之后我们可以测试一下
调用接口http://localhost:3306/order/save,我们会发现,我们的数据根据我们既定的规则进入了相应的表
总结
- 在配置的时候,版本问题会对配置造成一定的影响,所以如果配置相应内容的话, 要注意版本信息对应的官网配置规则
- 不同规则对应的配置规则不一,比如这里用的精确分片算法,需要找到对应的精确分片算法的配置内容,不然不会生效
本文转载自: 掘金