您的位置:首页 > 编程语言 > Java开发

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

2017-01-13 22:35 1176 查看
在最近的一个小项目中,由于会用到一点关于分表的操作,数据库是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());

@Override
public 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

记录一个网上的对于springboot的日志配置方法地址:http://www.cnblogs.com/lixuwu/p/5804793.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: