zoukankan      html  css  js  c++  java
  • 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,接下来就可以完美地实现分表的需求了!!!

  • 相关阅读:
    ASP.NET中使用附文本框插件
    HttpModules配置事项
    ASP.NET页面缓冲
    在ASP.NET中备份数据库以及还原(不成熟)
    python List使用
    SSH登录详解
    Vue.js使用-http请求
    Vue.js使用-组件示例(实现数据的CRUD)
    Vue.js使用-组件(下篇)
    Vue.js使用-组件(上篇)
  • 原文地址:https://www.cnblogs.com/handsomeye/p/6340471.html
Copyright © 2011-2022 走看看