本篇文章给大家分享的是有关Sharding中怎么使用Sphere实现数据分库分表操作),小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-core</artifactId>
<version>${sharding-sphere.version}</version>
</dependency>
<!-- for spring boot -->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>${sharding-sphere.version}</version>
</dependency>
我这里用的是最新的版本
<!-- 分库分表 -->
<sharding-sphere.version>4.0.0-RC3-SNAPSHOT</sharding-sphere.version>
当前测试例子是2库各10表,外加默认库的t_user表。结果如下:
创建数据库稍微注意一点,命名不能带下划线。 sharding0库脚本如下:
/*
Navicat Premium Data Transfer
Source Server :
Source Server Type : MySQL
Source Server Version : 50727
Source Host :
Source Schema : sharding0
Target Server Type : MySQL
Target Server Version : 50727
File Encoding : 65001
Date: 17/09/2019 10:43:09
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_order0
-- ----------------------------
DROP TABLE IF EXISTS `t_order0`;
CREATE TABLE `t_order0` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order1
-- ----------------------------
DROP TABLE IF EXISTS `t_order1`;
CREATE TABLE `t_order1` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order2
-- ----------------------------
DROP TABLE IF EXISTS `t_order2`;
CREATE TABLE `t_order2` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order3
-- ----------------------------
DROP TABLE IF EXISTS `t_order3`;
CREATE TABLE `t_order3` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order4
-- ----------------------------
DROP TABLE IF EXISTS `t_order4`;
CREATE TABLE `t_order4` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order5
-- ----------------------------
DROP TABLE IF EXISTS `t_order5`;
CREATE TABLE `t_order5` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order6
-- ----------------------------
DROP TABLE IF EXISTS `t_order6`;
CREATE TABLE `t_order6` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order7
-- ----------------------------
DROP TABLE IF EXISTS `t_order7`;
CREATE TABLE `t_order7` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order8
-- ----------------------------
DROP TABLE IF EXISTS `t_order8`;
CREATE TABLE `t_order8` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order9
-- ----------------------------
DROP TABLE IF EXISTS `t_order9`;
CREATE TABLE `t_order9` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`user_id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`age` int(11) NULL DEFAULT NULL,
`sex` int(4) NULL DEFAULT NULL,
`phone` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
sharding1数据库脚本如下:
/*
Navicat Premium Data Transfer
Source Server : 139.196.229.195
Source Server Type : MySQL
Source Server Version : 50727
Source Host : 139.196.229.195:3306
Source Schema : sharding1
Target Server Type : MySQL
Target Server Version : 50727
File Encoding : 65001
Date: 17/09/2019 10:43:20
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_order0
-- ----------------------------
DROP TABLE IF EXISTS `t_order0`;
CREATE TABLE `t_order0` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order1
-- ----------------------------
DROP TABLE IF EXISTS `t_order1`;
CREATE TABLE `t_order1` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order2
-- ----------------------------
DROP TABLE IF EXISTS `t_order2`;
CREATE TABLE `t_order2` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order3
-- ----------------------------
DROP TABLE IF EXISTS `t_order3`;
CREATE TABLE `t_order3` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order4
-- ----------------------------
DROP TABLE IF EXISTS `t_order4`;
CREATE TABLE `t_order4` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order5
-- ----------------------------
DROP TABLE IF EXISTS `t_order5`;
CREATE TABLE `t_order5` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order6
-- ----------------------------
DROP TABLE IF EXISTS `t_order6`;
CREATE TABLE `t_order6` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order7
-- ----------------------------
DROP TABLE IF EXISTS `t_order7`;
CREATE TABLE `t_order7` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order8
-- ----------------------------
DROP TABLE IF EXISTS `t_order8`;
CREATE TABLE `t_order8` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_order9
-- ----------------------------
DROP TABLE IF EXISTS `t_order9`;
CREATE TABLE `t_order9` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(32) NULL DEFAULT NULL,
`order_id` bigint(32) NULL DEFAULT NULL,
`title` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
#数据源名称,多数据源以逗号分隔
spring.shardingsphere.datasource.names=sharding0,sharding1
#sharding0是数据源名
spring.shardingsphere.datasource.sharding0.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.sharding0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.sharding0.url=jdbc:mysql://***:3306/sharding0?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL
spring.shardingsphere.datasource.sharding0.username=root
spring.shardingsphere.datasource.sharding0.password=***
# spring.shardingsphere.datasource.<data-source-name>.xxx= #数据库连接池的其它属性
# sharding1 是数据源名称
spring.shardingsphere.datasource.sharding1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.sharding1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.sharding1.url=jdbc:mysql://***:3306/sharding1?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL
spring.shardingsphere.datasource.sharding1.username=root
spring.shardingsphere.datasource.sharding1.password=***
# 默认数据源,没有分片的走这个数据源
spring.shardingsphere.sharding.default-data-source-name=sharding0
spring.shardingsphere.sharding.default-database-strategy.inline.sharding-column=user_id
spring.shardingsphere.sharding.default-database-strategy.inline.algorithm-expression=sharding$->{user_id % 2}
# t_order是表明
spring.shardingsphere.sharding.tables.t_order.actual-data-nodes=sharding$->{0..1}.t_order$->{0..9}
spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id
spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order$->{order_id % 10}
# 分布式主键 内置的支持这三种 SNOWFLAKE/UUID/LEAF_SEGMENT
spring.shardingsphere.sharding.tables.t_order.key-generator.column=id
spring.shardingsphere.sharding.tables.t_order.key-generator.type=SNOWFLAKE
因为上面是根据 user_id、order_id 两个字段分库分表的,所以必须插入查询都得带上user_id、order_id两个字段。
@Test
public void testSharding(){
Order order = new Order();
order.setUserId(1l);
order.setOrderId(1l);
order.setTitle("测试,userId:"+order.getUserId() + " orderId:" + order.getOrderId());
order.setContent(order.getTitle());
Assert.assertEquals(1,orderMapper.insert(order));
}
查看数据库,确实插入了
@Test
public void testShardingRead(){
OrderExample ex = new OrderExample();
ex.createCriteria().andUserIdEqualTo(1l).andOrderIdEqualTo(1l);
List<Order> orders = orderMapper.selectByExample(ex);
Assert.assertNotNull(orders);
Assert.assertEquals(1, orders.size());
orders.stream().forEach(o->{
System.out.println("userId:"+o.getUserId() + " orderId:" + o.getOrderId());
});
}
@Test
public void testUserWrite(){
User user = new User();
user.setAge(10);
user.setName("张三");
user.setPhone("15157181986");
user.setSex(1);
user.setUpdateTime(new Date());
user.setCreateTime(new Date());
userMapper.insert(user);
System.out.println("userId:"+user.getUserId());
}
@Test
public void testShardingReadCount(){
OrderExample ex = new OrderExample();
long count = orderMapper.countByExample(ex);
System.out.println("count:"+count);
}
@Test
public void testShardingReadLimit(){
OrderExample ex = new OrderExample();
ex.setLimit(2);
ex.setOffset(2l);
ex.setOrderByClause(" user_id desc ");
List<Order> orders = orderMapper.selectByExample(ex);
orders.stream().forEach(o->{
System.out.println("userId:"+o.getUserId() + " orderId:" + o.getOrderId());
});
}
@Getter
@Setter
public class GroupResult implements Serializable {
private Long userId;
private Integer cnt;
}
<resultMap id="GroupResultMap" type="com.zero.sharding.dal.dto.GroupResult">
<result column="user_id" jdbcType="BIGINT" property="userId" />
<result column="cnt" jdbcType="INTEGER" property="cnt" />
</resultMap>
<select id="getUserOrderCount" resultMap="GroupResultMap">
select user_id , count(1) as cnt from t_order group by user_id
</select>
@Test
public void testShardingReadGroupBy(){
List<GroupResult> userOrderCounts = orderMapper.getUserOrderCount();
userOrderCounts.forEach(u->System.out.println("userId:"+u.getUserId() + " count:" + u.getCnt()));
}
单表:不做分库分表的逻辑表 (如本示例中的t_user) 分表:做分库分表的逻辑表(如本示例中的 t_order) 广播表:指所有的分片数据源中都存在的表,表结构和表中的数据在每个数据库中均完全一致。适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表。(这个概念参考:广播表)
这里 单表 跟 分表关联查询,必须每一个库中有一份单表(也就是广播表),否则不能关联查询。如下面的语句,本示例中是不能执行的。因为本示例 t_order 逻辑表分散在两个库中,t_user表必须要在两个库中都有一份才能关联查询。
<select id="getOrders" parameterType="java.lang.Integer" resultType="OrderUnionUser">
select
id, u.user_id as userId, order_id as orderId , title, content, u.create_time as createTime , u.update_time as updateTime , `name`, age, sex, phone
from t_user u join t_order o on u.user_id = o.user_id
where u.age > #{age,jdbcType=INTEGER}
</select>
以上就是Sharding中怎么使用Sphere实现数据分库分表操作),小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/liangxiao/blog/3106437