shardbait2.0实现分表的功能可以用一句话描述:使用mybatis3的插件机制在执行sql之前对原始sql的里的表名进行修改。
一、配置:
1.在mybatis配置文件中添加插件配置
- <plugins>
- <plugin interceptor="com.google.code.shardbatis.plugin.ShardPlugin">
- <property name="shardingConfig" value="shard_config.xml"/>
- </plugin>
- </plugins>
2.实现自己的sharding策略
实现一个简单的接口即可
- /**
- * 分表策略接口
- * @author sean.he
- *
- */
- public interface ShardStrategy {
- /**
- * 得到实际表名
- * @param baseTableName 逻辑表名,一般是没有前缀或者是后缀的表名
- * @param params mybatis执行某个statement时使用的参数
- * @param mapperId mybatis配置的statement id
- * @return
- */
- String getTargetTableName(String baseTableName,Object params,String mapperId);
- }
- public class TestShardStrategyImpl implements ShardStrategy {
- // 最简单的实现修改表名的逻辑
- public String getTargetTableName(String baseTableName, Object params,
- String mapperId) {
- return baseTableName+"_xx";
- }
-
- }
3.添加sharding配置
新建一个xml文件,例如:shard_config.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE shardingConfig PUBLIC "-//shardbatis.//DTD Shardbatis 2.0//EN"
- "http://shardbatis./dtd/shardbatis-config.dtd">
- <shardingConfig>
- <!--
- ignoreList可选配置
- ignoreList配置的mapperId会被分表参加忽略解析,不会对sql进行修改
- -->
- <ignoreList>
- <value>com.google.code.shardbatis.test.mapper.AppTestMapper.insertNoShard</value>
- </ignoreList>
- <!--
- parseList可选配置
- 如果配置了parseList,只有在parseList范围内并且不再ignoreList内的sql才会被解析和修改
- -->
- <parseList>
- <value>com.google.code.shardbatis.test.mapper.AppTestMapper.insert</value>
- </parseList>
- <!--
- 配置分表策略
- -->
- <strategy tableName="APP_TEST" strategyClass="com.google.code.shardbatis.strategy.impl.AppTestShardStrategyImpl"/>
- </shardingConfig>
shard_config.xml必须保存在应用的classpath中
二、代码中使用shardbatis
因为shardbatis2.0使用插件方式对mybatis功能进行增强,因此使用配置了shardbatis的mybatis3和使用原生的mybatis3没有区别
- SqlSession session = sqlSessionFactory.openSession();
- try {
- AppTestMapper mapper = session.getMapper(AppTestMapper.class);
- mapper.insert(testDO);
- session.commit();
- } finally {
- session.close();
- }
更多详细信息请移步google code:http://code.google.com/p/shardbatis/
|