shardbatis实现分表「建议收藏」

Shardbatis的名称由shard(ing)+mybatis组合得到,是谷歌的一款开源软件。旨在为mybatis实现数据水平切分的功能。数据的水平切分包括多数据库的切分和多表的数据切分,目前sha

大家好,又见面了,我是全栈君。

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实现对应的策略类即可。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120875.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • unit8或double灰度图像的伪彩色显示[通俗易懂]

    unit8或double灰度图像的伪彩色显示[通俗易懂]简单将unit8或double类型灰度图以设定的伪彩色图像显示:  figure,imshow(gray,’Colormap’,jet(255));将灰度图像直接转化为RGB图形:rgb=ind2rgb(gray2ind(im,255),jet(255));如果是unit8数据而不是double类型数据可采用如下伪彩色转换:rgb=label2rgb(gray2ind(…

    2022年9月2日
    2
  • 现代 PHP 新特性系列(三) —— Trait 概览

    现代 PHP 新特性系列(三) —— Trait 概览

    2021年10月10日
    43
  • A4988步进驱动

    A4988步进驱动基本知识绕组  常用的步进电机有四根线,1A1B2A2B,1A和1B是一个绕组,2A和2B是一个绕组,用万用表测试1A和1B之间是短路的,2A和2B之间是短路的,1A和1B,2A和2B是等效的。  通常状况下,步进电机可以自由转动(用手可以拧动),1A和1B接在一起的时候,用手拧会感到明显阻力,1A和1B,2A和2B分别接在一起,则阻力更大。步距角  所谓步进电机,就是可以…

    2022年6月29日
    36
  • linux下nginx启动_centos7添加静态路由

    linux下nginx启动_centos7添加静态路由啥?都2020年了,在Linux中还不会安装部署nginx啊。花5分钟赶紧来看看吧。步骤超详细,学不会你来揍我。

    2022年10月5日
    1
  • 分析ICMP报文「建议收藏」

    分析ICMP报文「建议收藏」目录捕获准备:ICMP的相关知识:报文分析:捕获准备:启动wireshark录制数据包,打开命令行窗口输入pingwww.sina.com.cn。Wireshark已记录下报文,在过滤器输入ip.addr==120.192.83.125过滤报文。ICMP的相关知识:ICMP是(InternetControlMessage…

    2022年4月29日
    97
  • 使用TinyXML读写xml文件

    使用TinyXML读写xml文件1、TinyXML  引用网上的原话:TinyXML是目前非常流行的一款基于DOM模型的XML解析器,简单易用且小巧玲珑,非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作。支持对XML的读取和修改,不直接支持XPath,需要借助另一个相关的类库TinyXPath才可以支持XPath。  TinyXML源码是使用C++语言编写的,这对于C++应用来说是很好

    2022年6月3日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号