Mybatis中分表插件shardbatis使用說明


  Mybatis中實現分表,有個很簡單的插件,叫shardbatis,使用maven構建的工程,可以在pom.xml中添加依賴性即可:

<!-- 分庫分表插件 -->
<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.8.0</version>
</dependency>

  使用方式:shardbatis-2.0.0B.jar中有一個ShardStrategy接口,源碼如下:

public abstract interface ShardStrategy
{
  public abstract String getTargetTableName(String paramString1, Object paramObject, String paramString2);
}

  用戶可以自定義實現該接口的getTargetTableName方法,例如按年月分表實現:

/**
 * 分表策略,自動按當前年月分表
 * @author yehx
 *
 */
public class ShardStrategyByYearMonthImpl implements ShardStrategy {
    
    private static Log log = LogFactory.getLog(ShardStrategyByYearMonthImpl.class);
    
    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
    /**
     * 得到實際表名
     * @param baseTableName 邏輯表名,一般是沒有前綴或者是后綴的表名
     * @param params        mybatis執行某個statement時使用的參數
     * @param mapperId      mybatis配置的statement id
     * @return
     */

    public String getTargetTableName(String baseTableName,Object params, String mapperId) {
        return baseTableName +"_" + sdf.format(new Date());
    }
}

  按年月分表的實現寫好了之后,那這時候就需要配置,哪個mapperId需要按照該策略進行操作,即需要配置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.**.splittable.ShardStrategyByDayImpl" />
</shardingConfig> 

  那么,如何加載該文件呢,很簡單,只需要在mybatis-config.xml文件中增加插件配置即可,配置如下:

<configuration>
    <!-- 插件配置 -->
    <plugins>
        <!-- 分表插件配置 -->
        <plugin interceptor="com.google.code.shardbatis.plugin.ShardPlugin">  
                <property name="shardingConfig" value="shard_config.xml"/>  
        </plugin> 
    </plugins>
</configuration>

  而mybatis-config.xml文件是在哪加載的呢?是在配置sqlSessionFactory的地方指定的,如用spring的話,則在spring-mybatis.xml中配置:

<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <!-- mybatis-config配置文件 -->
    <property name="configLocation" value="classpath:mybatis-config.xml" />
    <!-- 自動掃描mapping.xml文件 -->
    <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
</bean>

  好了,配置ok,接下來就可以完美地實現分表的需求了!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM