
Sharding-JDBC—分库分表实例【面试+工作】

学习之前先详细介绍Sharding-JDBC
Sharding-JDBC是一个开源的适用于微服务的分布式数据访问基础类库,它始终以云原生的基础开发套件为目标。
Sharding-JDBC定位为轻量级java框架,使用客户端直连数据库,以jar包形式提供服务,未使用中间层,无需额外部署,无其他依赖,DBA也无需改变原有的运维方式,可理解为增强版的JDBC驱动,旧代码迁移成本几乎为零。
Sharding-JDBC完整的实现了分库分表,读写分离和分布式主键功能,并初步实现了柔性事务。从2016年开源至今,在经历了整体架构的数次精炼以及稳定性打磨后,如今它已积累了足够的底蕴,相信可以成为开发者选择技术组件时的一个参考。
架构图

之前,我们介绍了利用Mycat进行分库分表操作,Mycat分表操作是利用分库来进行的,单个库中的分表操作可结合MySQL的分区进行,这也是Mycat官方提倡的方式。那么,如何利用Mycat真正实现数据库的分库分表,可以私信我。今天,我们来看看sharding-jdbc,sharding-jdbc也是一款分库分表的“中间件”,不过,它并不向Mycat那样作为一个真正的中间件,它是一款以jar包的形式整合到业务中的插件,这就决定了它是轻量级的,用法也是十分简单的。
接下来,我们就利用sharding-jdbc进行数据库的分库分表操作。
首先我们创建相应的数据库

这样我们就创建了两个数据库sharding_0和sharding_1;
接下来我们在两个库中创建相应的数据表,在两个库中分别进行如下SQL:


这样,我们的数据库就准备好了。
接下来,我们就创建一个Maven项目,项目结构如下:




这里,我们创建两个数据库映射类:User类和Student类。
4-1、User类


4-2、Student类


5-1、UserMapper类

5-2、StudentMapper类

6-1、UserService类

6-2、StudentService类

7-1、UserServiceImpl类


7-2、StudentServiceImpl类

8-1、User分库逻辑UserSingleKeyDatabaseShardingAlgorithm类


8-2、Student分库逻辑StudentSingleKeyDatabaseShardingAlgorithm


9-1、User分表逻辑UserSingleKeyTableShardingAlgorithm


9-2、创建Student分表逻辑StudentSingleKeyTableShardingAlgorithm


10-1、创建UserMapper.xml

10-2、创建StudentMapper.xml


12-1、spring-database.xml



12-2、spring-sharding.xml








我们进行ShardingJdbcMybatisTest类,查看数据表数据,即可看到我们的程序利用sharding-jdbc实现了分库分表操作。