• shardbatis实现分表


    Shardbatis的名称由shard(ing)+mybatis组合得到,是谷歌的一款开源软件。旨在为mybatis实现数据水平切分的功能。数据的水平切分包括多数据库的切分和多表的数据切分,目前shardbatis只实现了单数据库的数据多表水平切分。Shardbatis对mybatis的代码无侵入,不改变用户对mybatis的使用习惯。

    1.配置pom文件依赖

    <!-- pom中引入依赖 -->
    <dependency>
        <groupId>org.shardbatis</groupId>
        <artifactId>shardbatis</artifactId>
        <version>2.0.0B</version>
    </dependency>
    
    <!-- 由于googlecode已关闭远程仓库,已不可用 -->
    <repository>
        <id>shardbaits</id>
        <name>shardbaits repository</name>
        <url>http://shardbatis.googlecode.com/svn/trunk/repository</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    

    由于googlecode已关闭远程仓库,以上依赖已不可用,可以考虑将其源码复制下来放入自己的工程里面shardbatis

    2.mybaits配置文件mybatis-config.xml中配置下插件

    <plugins>
      	<plugin interceptor="com.google.code.shardbatis.plugin.ShardPlugin">
    		<property name="shardingConfig" value="shard_config.xml"/>
    	</plugin>
    </plugins>
    

    3.在resources目录下放置shardbatis的配置文件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></value>  
            </ignoreList>  
            <!--   
    	      	parseList可选配置  
    	      	如果配置了parseList,只有在parseList范围内并且不再ignoreList内的sql才会被解析和修改  
            -->  
            <parseList>
                    <!-- t_table -->
                    <value>com.sam.mappers.TTable.selectByExample</value>
                    <value>com.sam.mappers.TTable.insertSelective</value>
            </parseList>
            <!--  
            	 配置分表策略 :策略类需要在后续步骤中实现
            -->  
            <strategy tableName="t_table" strategyClass="com.sam.strategy.TTableStrategy"/>
    
    </shardingConfig>
    

    4.实现上述2中配置的分表策略TTableStrategy

    该类实现com.google.code.shardbatis.strategy.ShardStrategy接口,并重写接口getTargetTableName,其中参数baseTableName就是mybatis的mapper.xml文件中的表名,param就是方法传递的参数,mapperId就是方法名;这些参数值都是插件自动获取的。
    方法返回的tableName就是真实要操作的表名,插件会把mapper.xml文件中的表名替换为该返回的tableName,然后进行sql操作

    public class TTableStrategy implements ShardStrategy {
    
        @Override
        public String getTargetTableName(String baseTableName, Object param, String mapperId) {
            String tableName = baseTableName;
    
            String partitionId = null;
    
            if (param instanceof TTable) {
            //这里的TTable是表名对应的实体类,对象的partitionId是在调用mapper接口前设定好的
                TTable obj= (TTable) param;
                partitionId = ojb.getPartitionId();
    
            } else if (param instanceof TTableExample) {
            //TTableExample是mybatis插件自动生成的代码,用过mybatis-generate插件的肯定了解,不多说;对象的partitionId是在调用mapper接口前设定好的
                TTableExample obj= (TTableExample) param;
                partitionId = obj.getPartitionId();
            }
            if(!StringUtils.isNullOrEmpty(partitionId)){
                tableName = tableName + "_" + partitionId;
            }
            return tableName;
        }
    
    }
    

    5.添加新的分表

    如果项目上已经实现了shardbatis分表,要新增一个新的要分表的表,只需要修改步骤3中的配置文件并按照步骤4实现对应的策略类即可。

  • 相关阅读:
    临时文件服务器,配置共享文件夹
    封装扩展方法
    List.Insert
    VS 生成事件中xcopy失败
    创建型设计模式总结
    js提交图片转换为base64
    C#建造者模式
    echarts 立体柱
    k8s生产环境启用防火墙,要开启的端口
    一篇文章为你图解Kubernetes网络通信原理
  • 原文地址:https://www.cnblogs.com/sam-uncle/p/13915407.html
Copyright © 2020-2023  润新知