mybatis3分表插件shardbatis 2.0

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.googlecode.com//DTD Shardbatis 2.0//EN"
  "http://shardbatis.googlecode.com/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/

你可能感兴趣的:(sql,mybatis,sharding)