1.引入依赖

主要引入Sharding-JDBC依赖sharding-jdbc-spring-boot-starter,其他的依赖都是为了后面的测试环节所准备的

pom.xml

<!-- sharding-jdbc -->
<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.0.0-RC1</version>
</dependency>

2.创建两个结构相同的表

创建两个结构相同的用户表(user0user1),两张表的建表语句如下

CREATE TABLE `user0` (`id` bigint(11) NOT NULL,`username` varchar(32) NOT NULL,`password` varchar(32) NOT NULL,`motto` varchar(255) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `user1` (`id` bigint(11) NOT NULL,`username` varchar(32) NOT NULL,`password` varchar(32) NOT NULL,`motto` varchar(255) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.项目配置文件

application.yml

注意: 主键生成使用sharding-jdbc提供的主键生成策略雪花算法,如果有读者对不了解雪花算法,可以到sharding-jdbc官网文档 《Shard-JDBC官方文档-分布式主键》 中了解,官网对使用该算法的原因和原理都讲的十分清楚,笔者在这里就不再赘述了~!

server:port: 9999
spring:shardingsphere:props:sql:show: truedatasource:names: ds0ds0:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTCusername: rootpassword: 123456sharding:tables:user: # 水平分表,取模运算(user表的分布情况user0,user1)keyGeneratorColumnName: id # 主键keyGenerator:column: idtype: SNOWFLAKE # 使用雪花算法actualDataNodes: ds0.user$->{0..1} # 分库分表分表表达式,匹配user0和user1tableStrategy:inline:shardingColumn: id # 分片字段algorithmExpression: user$->{id % 2} # 分片表达式

4.编写user表实体类

/*** <p>user表实体类</p>* @author Bosen* @date 2021/10/10 15:36*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {private long id;private String motto;private String username;private String password;
}

5.编写user表映射接口

/*** <p>user表映射接口</p>* @author Bosen* @date 2021/10/10 15:37*/
@Repository
@Mapper
public interface UserMapper {@Insert("insert into user(username, password, motto) values(#{username}, #{password}, #{motto})")int insert(@Param("username") String username, @Param("password") String password, @Param("motto") String motto);@Select("select * from user where id = #{id}")User findById(@Param("id") long id);@Select("select * from user;")List<User> findAll();
}

6.编写测试类

@SpringBootTest
class ShardingTestApplicationTests {@AutowiredUserMapper userMapper;@Testvoid testInsert() {System.out.println(userMapper.insert("张三", "123456", "长风破浪会有时,直挂云帆济沧海"));}@Testvoid testSelect() {System.out.println(userMapper.findById(653987601618829313L));}@Testvoid testFindAll() {System.out.println(userMapper.findAll());}
}

1.执行方法testInsert(),并查看表user0user1的数据:

如上,通过查看两张表的数据,我们可以发现有一条id=653987601618829313的数据插入到了表user1中,而表user0为空。这是因为该id值通过分片表达式id % 2的计算得出结果1,进而得知该数据应该插入到表user1中,而非表user0

若现在我们再多插入几条数据,再次观察两张表中的数据:

此时我们发现,表user0中也有数据插入了,并且两张表的id值分别是偶数奇数


2.执行方法testSelect(),运行结果如下:

我们获取到了在表user1id=653987601618829313的数据


3.执行方法testFindAll(),运行结果如下:(此时我们可以得到两张表中的所有数据,为了易于分辨数据来源于哪一张表,笔者将user0表中的名字数据由张三改为了李四

至此,我们的SpringBoot已经成功整合Sharding-JDBC分库分表中间件,并测试完毕~!!

SpringBoot整合Sharding-JDBC分库分表中间件相关推荐

  1. Spring boot + Sharding JDBC 分库分表 及 分布式事务处理

    Sharding JDBC 基础概念 Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC.Proxy 和 Sidecar(规划中)这 3 款既能够 ...

  2. 【分布式mysql分库分表中间件sharding】

    分布式mysql分库分表中间件,sharding领域的一站式解决方案.具备丰富.灵活的路由算法支持,能够方便DBA实现库的水平扩容和降低数据迁移成本.shark采用应用集成架构,放弃通用性,只为换取更 ...

  3. 【数据库与事务系列】分库分表中间件

    前面讲了利用mybatis插件进行多数据源切换和分表的方案,但是对业务侵入性较强,当然给予mybatis-plus的对业务侵入性还好,但是支持的策略有限.场景有限. 所以业界诞生了很多分库分表中间件来 ...

  4. 一文快速入门分库分表中间件 Sharding-JDBC (必修课)

    书接上文 <一文快速入门分库分表(必修课)>,这篇拖了好长的时间,本来计划在一周前就该写完的,结果家庭内部突然人事调整,领导层进行权利交接,随之宣布我正式当爹,紧接着家庭地位滑落至第三名, ...

  5. 一文快速入门分库分表中间件 Sharding-JDBC

    一.Sharding-JDBC 简介 Sharding-JDBC 最早是当当网内部使用的一款分库分表框架,到2017年的时候才开始对外开源,这几年在大量社区贡献者的不断迭代下,功能也逐渐完善,现已更名 ...

  6. 【Sharding-JDBC系列二】一文快速入门分库分表中间件 Sharding-JDBC (必修课)

    作为Sharding-JDBC 分库分表实战系列的开篇文章,我们在前文中回顾了一下分库分表的基础知识,对分库分表的拆分方式有了一定的了解,下边我们介绍一下 Sharding-JDBC框架和快速的搭建一 ...

  7. 分库分表中间件Sharding-JDBC

    数据库分库分表从互联网时代开启至今,一直是热门话题.在NoSQL横行的今天,关系型数据库凭借其稳定.查询灵活.兼容等特性,仍被大多数公司作为首选数据库.因此,合理采用分库分表技术应对海量数据和高并发对 ...

  8. 关系型数据库分库分表中间件之选型

    写在前面 本文主要介绍关系型数据库分库分表的中间件,主要包含中间件介绍.选项及其对比.虽然市面上很多分库分表中间件,但是大多数都是不友好或者社区活跃度不高的项目,当然还是有很多淘汰的中间件.目前,在实 ...

  9. 自己动手写一个分库分表中间件(三)数据源路由实现

    相关文章: 自己动手写一个分库分表中间件(一)思考 自己动手写一个分库分表中间件(二)数据源定义和分片代理层设计 排查项目中读写分离失效原因 小议 Java 内省机制 注:本文内容暂不涉及事务相关的问 ...

最新文章

  1. 5G+AI,中国版无人驾驶可以有多猛?
  2. oracle自动冷备份脚本
  3. LoadRunner 8.1 学习笔记4
  4. Excel制作图表的方法
  5. 【并查集】封锁阳光大学(P1330)
  6. ERROR: Cannot unpack file C:\Users\admin\AppData\Local\Temp\pip-unpack-yo8pmupp\simple.htm (download
  7. [转] Gmail 的Host解决方案
  8. 开源需自立!Android、GitHub、Apache 全线告急!
  9. jq怎么赋值给变量_jq: 工具方法
  10. EGE基础入门篇(五):换上我的彩色画笔
  11. 云计算就业方向有哪些 未来的发展前景怎么样
  12. Excel-几行几行进行转置
  13. 个体和公司以及小微企业的区别
  14. MySQL 中删除重复数据只保留一条
  15. 程序员书籍PDF大收集
  16. 牛客网软件测试面试题总结
  17. Graph Neural Networks: A Review of Methods and Applications(图神经网络:方法与应用综述)
  18. UE4官方文档学习笔记材质篇——UV坐标动画,凹凸贴图偏移
  19. 计算机启动异常卡顿,解决开机卡顿的问题,电脑卡在开机界面的解决办法
  20. 国家气象局提供的天气预报接口(完整Json接口)

热门文章

  1. C#和vb.net代码相互转换,翻译
  2. HDLBits: 在线学习 SystemVerilog(十七)-Problem 106-114(移位寄存器)
  3. Linux的软链接与硬链接
  4. matlab—多行注释
  5. 辽宁省中职高考计算机专业,2017年辽宁民族师范高等专科学校单招(计算机)考试大纲(中职生)...
  6. c连接mysql数据库字符串函数_在mysql数据库—— 字符串函数的运用
  7. AI智能加持,景联文科技助力扫地机器人突破技术创新,维护核心竞争力,提供数据采集服务
  8. python年份天干地支代码_好用的Python第三方日历库:sxtwl(可算天干地支)
  9. 神经网络分类数据表格图,神经网络分类数据表格
  10. 如何在linux(ubuntu)下安装字体(给wps安装字体)