Mybatis 分表插件shardbatis2.0使用

 shardbatis是一个由国人贡献的,Mybatis分库分表插件。Shardbatis的名称由shard(ing)+mybatis组合得到。
诣在为ibatis实现数据水平切分的功能。
数据的水平切分包括多数据库的切分和多表的数据切分。目前shardbatis已经实现了单数据库的数据多表水平切分。
Shardbatis2.0可以以插件的方式和mybatis3.x进行整合,对mybatis的代码无侵入,不改变用户对mybatis的使用习惯。
shardbatis的使用与原生的mybatis3没有区别,使用者只需要将shardbatis以Mybatis插件的方式引入进来,实现路由策略接口,
实现自己的路由策略即可,此外还需要一个shard_config.xm配置文件,定义哪些sql映射操作需要使用路由策略。


一.版本:
Maven3.0+
Spring4.1.5.RELEASE
Mybatis 3.4.0
MySQL.5.6.30 (64位)


二.配置:
1.dao,web模块 目录下新建libs/shardbatis-2.0.0B.jar目录。


2.maven配置:
主pom中添加
2.0.0B
0.7.0


dao和web模块pom中添加:

org.shardbatis
shardbatis
${shardbatis.version}


net.sf.jsqlparser
jsqlparser
${jsqlparser.version}





3.添加sharding配置
新建一个xml文件,例如:shard_config.xml


 
  "http://shardbatis.googlecode.com/dtd/shardbatis-config.dtd">  

       
         
                com.dao.xxxDao.insert  
                com.dao.xxxDao.updateByPrimaryKey  
       
 
       !-- 
                配置分表策略
        -->
           



4.接口实现类,实现一个简单的接口即可,实现自己的sharding策略:
import com.google.code.shardbatis.strategy.ShardStrategy;
/**
         * 得到实际表名
         * @param baseTableName 逻辑表名,一般是没有前缀或者是后缀的表名
         * @param params mybatis执行某个statement时使用的参数
         * @param mapperId mybatis配置的statement id
         * @return
         */
public class ShardStrategyImpl implements ShardStrategy {
@Override
public String getTargetTableName(String tableName, Object arg1, String arg2) {
String sTableName = tableName + "_" + DateUtil.getCurrentDate_YYYY_MM();
return sTableName;
}
}


5.在mybatis配置文件中添加插件配置:
       






6.代码中使用shardbatis
因为shardbatis2.0使用插件方式对mybatis功能进行增强,因此使用配置了shardbatis的mybatis3和使用原生的mybatis3没有区别。


------------------------------------------
如果maven无法识别google的jar,采用以下配置把jar引入war包lib下:
dao和web模块pom中添加:

org.shardbatis
shardbatis
${shardbatis.version}
system
${project.basedir}/libs/shardbatis-2.0.0B.jar


net.sf.jsqlparser
jsqlparser



web模块pom中添加:

org.apache.maven.plugins
maven-war-plugin
2.3

${project.artifactId}


libs/
WEB-INF/lib

**/*.jar






org.apache.maven.plugins
maven-dependency-plugin
2.7


package

copy-dependencies




system
${project.build.directory}



org.apache.maven.plugins
maven-jar-plugin



true

com.xx.xx.xx






mysql  表名按月分表 CREATE TABLE TABLE_YYYY_MM(),手动执行生成2个月份的表。
基于以上查询会依据当前月份的表名来获得数据,单表的并发能力和磁盘I/O性能提高了。

你可能感兴趣的:(Mybatis)