采用shardbatis在springBoot中实现表的水平拆分,整合swagger,mybatis,shardbatis,pagehelper

来源:互联网 发布:删除静态ip ubuntu 编辑:程序博客网 时间:2024/06/06 18:01

在最近的一个小项目中,由于会用到一点关于分表的操作,数据库是mysql的,在那个mysql数据库中有一个函数,每天会创建一张数据表作为分表,创建出来的表和原始表的结构不变,只是表名有一点改变。

为此,为了解决这个问题,我在网上搜索了一些关于分表的解决办法,我这里用的是mybatis作为持久层框架,在网上找到了一个叫做shardbatis的开源插件,于是便用了起来,但在使用的过程中,发现这个shardbatis 和最新版本的pageHelper有JAR包冲突,为了解决它,我将之前的shardbatis项目进了一个小改,项目地址为:点击打开链接

为了能让以后的新项目能快速开发,我这里将它写成一个小DEMO,以后若是有类似的情况出现,以便我快速使用。

代码我都记录在了github上了,这里就不贴代码了,只上效果图。

创建了3张表,表内数据截图如下:




分别为city,city_2015,city_2016三张表,其为假设city_2015,city_2016为分表

当发现查询条目的id为3,4时从city_2015表查询;id为5,6时从city_2016表查询,其他数据从city表查询

主要实现插件中的分表策略接口,代码如下:

public class CityShardStrategyImpl implements ShardStrategy {Logger LOG = LoggerFactory.getLogger(getClass());@Overridepublic String getTargetTableName(String baseTableName, Object params, String mapperId) {LOG.debug("baseTableName->" + baseTableName + " \tparams->" + params + "\tmapperId->" + mapperId);if (params instanceof Long) {int nowIndex = ((Long) params).intValue();if (nowIndex == 3 || nowIndex == 4) {baseTableName = baseTableName + "_" + 2015;} else if (nowIndex == 5 || nowIndex == 6) {baseTableName = baseTableName + "_" + 2016;}}LOG.debug("proced baseTableName->" + baseTableName + " \tparams->" + params + "\tmapperId->" + mapperId);return baseTableName;}}

DEMO运行分表截图如下:



OK!用这个插件,确实感觉好简单,一下就搞定了,感谢开源插件贡献者


本小DEMO swagger截图:



druid监控台截图:



DEMO开源地址:

https://github.com/puhaiyang/springBoot-swagger-mybatis-shardbatis


0 0
原创粉丝点击