1.在pom文件中加入依赖
<dependency>
<groupId>org.shardbatis</groupId>
<artifactId>shardbatis</artifactId>
<version>2.0.0B</version>
</dependency>
<!-- sql解析插件 -->
<dependency>
<groupId>net.sf.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.7.0</version>
</dependency>
2.创建一个mybatis的配置文件 加入如下配置
<configuration>
<!-- 插件配置 -->
<plugins>
<!-- 分表插件配置 -->
<plugin interceptor="com.google.code.shardbatis.plugin.ShardPlugin">
<property name="shardingConfig" value="shard_config.xml"/>
</plugin>
</plugins>
</configuration>
3.项目启动时加载 mybatis 配置文件 配置位置如下
<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- mybatis-config配置文件 -->
<property name="configLocation" value="classpath:mybatis.xml" />
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
</bean>
4.实现ShardStrategy接口的getTargetTableName方法
public class ShardStrategyByYearMonthImpl implements ShardStrategy {
/**
* 得到实际表名
* @param baseTableName 逻辑表名,一般是没有前缀或者是后缀的表名
* @param params mybatis执行某个statement时使用的参数
* @param mapperId mybatis配置的statement id
* @return
*/
public String getTargetTableName(String baseTableName,Object params, String mapperId) {
//根据自己的规则分表 返回值为对于的表名
return baseTableName +"_" +1;
}
}
5.配置分表策略shard_config.xml
<shardingConfig>
<!-- ignoreList可选配置 ignoreList配置的mapperId会被分表参加忽略解析,不会对sql进行修改,value可配置多个 -->
<ignoreList>
<value></value>
</ignoreList>
<!-- parseList可选配置 如果配置了parseList,只有在parseList范围内并且不再ignoreList内的sql才会被解析和修改,value可配置多个 -->
<parseList>
<value>com.**.mapper.UserMapper.addUser</value>
</parseList>
<!-- 配置分表策略 -->
<strategy tableName="demo_user"
strategyClass="com.**.**.ShardStrategyByDayImpl" />
</shardingConfig>
以下是本人遇到的问题(如有问题欢迎评论讨论)
1.jar不能自动通过maven下载
2.版本兼容问题 这里给出一套 spring与mybatis的
<spring.version>3.2.8.RELEASE</spring.version>
<mybatis.version>3.4.0</mybatis.version>
<mybatis-spring.version>1.3.0</mybatis-spring.version>