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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 知识图谱—知识推理综述(三)

    知识图谱—知识推理综述(三)知识图谱—知识推理综述(三)接上一篇文章知识图谱—知识推理综述(二)3基于表示的知识推理3.1方法简述在之前所介绍的知识推理中,都显示的定义了知识推理所需要的规则,条件等等离散符号。而在基于表示的知识推理中,我们第一步是将知识图谱中的节点和关系进行连续向量空间的映射,需要将其物理表示映射为数值表示,然后在利用数学中的相关算法,通过数值计算的方式进行知识推理。对于映射的向量空间而言,其可以是一个或者多个的向量或者矩阵。基于表示的推理的核心在于“如何表示”,在表示学习的过程中,我们需要的是让算法自

  • IntellijIdea 非Maven项目打Jar包

    IntellijIdea 非Maven项目打Jar包  一、以SpringBoot项目为例,在未使用maven的情况下将其打成Jar包。  二、将其打成散包,即项目依赖的Jar包在目录同级或子级。好处是如果项目更新,只需要更新项目的jar,不需要更新所有。  一、检查项目是否包含META-INF文件夹。     若包含META-INF文件夹,将其删除。等下重新生成。  二、构建Artifacts  2.1选择菜…

  • at中文_the controller has detected a

    at中文_the controller has detected aConstructing Objects at Run Time

  • UML——交互图

    UML——交互图UML——交互图

  • 自建电驴服务器,电驴服务器怎么连接 eMule连接服务器教程

    自建电驴服务器,电驴服务器怎么连接 eMule连接服务器教程电驴(eMule)是一款非常实用的资源下载工具。但有时候用户会反映,电驴连接不到服务器的情况,今天小编就跟大家讲讲电驴服务器怎么连接,让你轻松下载到自己需要的资源。eMule连接服务器教程步骤一:在电驴服务器界面右边的“从URL更新server.met”字样下边的小框里输入“”,然后点击“更新”,下载新的服务器列表即可(使用的网址不要emule.org.cn提供的)步骤二:解决kad网络无法连接1…

  • phpstorm2021永久激活码-激活码分享

    (phpstorm2021永久激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html9ZHRNTE33T-eyJsaWN…

发表回复

您的电子邮箱地址不会被公开。

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