Mybatisplus3.5.1+shardingsphere-jdbc5.1.1分表
注意使用雪花ID的话,查询ID时候必须使用long类型的ID,不要使用MP自带的默认的Serializable类型。否则会提示分片主键id数据类型和分片算法不匹配Inline sharding algorithms expression
xxxand sharding columnxxnot match错误。。。
导入依赖
<!--sharding-jdbc 分库分表-->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
<version>5.1.1</version>
</dependency>
<!--jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--Mybatis-plus 代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatisplus.verison}</version>
</dependency>
建立10张表
CREATE TABLE `sharding_jdbc_0` (
`shading_table_id` bigint(22) NOT NULL COMMENT 'ID',
`name` varchar(50) DEFAULT NULL COMMENT '名称',
`state` int(2) DEFAULT '1' COMMENT '状态:1有效0无效',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`user_id` bigint(22) DEFAULT NULL COMMENT '用户ID',
PRIMARY KEY (`shading_table_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `sharding_jdbc_1` (
`shading_table_id` bigint(22) NOT NULL COMMENT 'ID',
`name` varchar(50) DEFAULT NULL COMMENT '名称',
`state` int(2) DEFAULT '1' COMMENT '状态:1有效0无效',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`user_id` bigint(22) DEFAULT NULL COMMENT '用户ID',
PRIMARY KEY (`shading_table_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
.........省略其他表。。。。。。。。
mybatisplus的配置
mybatis-plus:
type-aliases-package: com.gton.user.entity
mapper-locations: classpath*:com/gton/user/mapper/xml/*Mapper.xml
configuration:
map-underscore-to-camel-case: true #开启驼峰命名
cache-enabled: false #开启二级缓存
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 控制台日志
check-config-location: true # 检查xml是否存在
type-enums-package: com.gton.enumPackage #通用枚举开启
global-config:
db-config:
logic-not-delete-value: 1
logic-delete-field: isDel
logic-delete-value: 0
ShardingJDBC的配置
注意yml的配置格式严格要求,错一个空格都不行
spring:
shardingsphere:
datasource:
names: masterdb,ds02
masterdb:
type: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.jdbc.Driver
# 正常的连接数据库
url: jdbc:mysql://127.0.0.1:3306/study?zeroDateTimeBehavior=convertToNull&useSSL=false&useUnicode=true&characterEncoding=UTF-8
username: root
password: root
ds02:
type: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.jdbc.Driver
# 正常的连接数据库
url: jdbc:mysql://127.0.0.1:3306/study?zeroDateTimeBehavior=convertToNull&useSSL=false&useUnicode=true&characterEncoding=UTF-8
username: root
password: root
props:
# 日志显示SQL
sql.show: true
rules:
sharding:
# 表的分片策略
tables:
# 逻辑表的名称
sharding_jdbc:
# 数据节点配置,采用Groovy表达式
actual-data-nodes: masterdb.sharding_jdbc_$->{0..9}
# 配置策略
table-strategy:
# 用于单分片键的标准分片场景
standard:
sharding-column: shading_table_id
# 分片算法名字
sharding-algorithm-name: use-inline
key-generate-strategy: # 主键生成策略
column: shading_table_id # 主键列
key-generator-name: snowflake # 策略算法名称(推荐使用雪花算法)
key-generators:
snowflake:
type: SNOWFLAKE
sharding-algorithms:
use-inline:
type: INLINE
props:
# 分片算法行表达式,需符合groovy语法 '& Integer.MAX_VALUE' 位运算使hash值为正数, 取模运算
# algorithm-expression: sharding_jdbc_$->{(id.hashCode() & Integer.MAX_VALUE) % 9}
# 获取id取模范围为0-10, 包含0, 不包含10
algorithm-expression: sharding_jdbc_$->{shading_table_id % 10}
mode:
type: memory
实体类
/**
* (ShardingJdbc1)表实体类
*
* @author 郭童
* @since 2023-05-20 14:58:06
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "ShardingJdbc1", description = "EasyCode")
public class ShardingJdbc implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty("ID")
private Long shadingTableId;
@TableField(value = "name")
@ApiModelProperty("名称")
private String name;
@TableField(value = "state")
@ApiModelProperty("状态:1有效0无效")
private Integer state;
@TableField(value = "create_time", fill = FieldFill.INSERT)
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@TableField(value = "user_id")
@ApiModelProperty("用户ID")
private Long userId;
}
Mapper的接口
/**
* (ShardingJdbc1)表数据库访问层
*
* @author 郭童
* @since 2023-05-20 14:58:06
*/
@Mapper
public interface ShardingJdbcMapper extends EasyBaseMapper<ShardingJdbc> {
}
/**
* @description: EasyBaseMapper<T> extends BaseMapper<T>
* @author: GuoTong
* @createTime: 2022-12-06 16:29
* @since JDK 1.8 OR 11
**/
public interface EasyBaseMapper<T> extends BaseMapper<T> {
/**
* 批量插入 仅适用于mysql
*
* @param entityList 实体列表
* @return 影响行数
*/
Integer insertBatchSomeColumn(Collection<T> entityList);
}
其余的三层就不一一赘述了!!!!各种MP的代码生成器!!执行解决!!推荐EasyCode全自动代码生成器,配好就很好使。。。我的其他文章介绍使用。。。
Controller的新增和查询
/**
* 通过主键查询单条数据
*
* @param id 主键
* @return 单条数据
*/
@GetMapping("/queryOne/{id}")
public Resp<ShardingJdbc> selectOne(@PathVariable("id") Long id) {
QueryWrapper<ShardingJdbc> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("shading_table_id", id);
return Resp.Ok(this.shardingJdbcService.getOne(queryWrapper));
}
/**
* 新增数据
*
* @param shardingJdbc 实体对象
* @return 新增结果
*/
@PostMapping("/save")
public Resp<String> insert(@RequestBody ShardingJdbc shardingJdbc) {
boolean save = false;
String executeMsg = null;
try {
save = this.shardingJdbcService.save(shardingJdbc);
executeMsg = "新增成功,id 是:" + shardingJdbc.getShadingTableId();
} catch (Exception e) {
executeMsg = e.getMessage();
}
return save ? Resp.Ok(executeMsg) : Resp.error(executeMsg);
}
测试效果!!
新增

查询

捯饬结束!!!!!整合成功!!!
Mybatisplus3.5.1+shardingsphere-jdbc5.1.1分表的更多相关文章
- mysql--使用shardingsphere实现分表
一. 简介 为什么要分表,无非就两个原因,要么是并发太高,要么就是数据量太大. 所谓分表就是把传统的单表扩展为多个数据结构一样的表,通过分表策略确定操作哪一张表. 我使用的分表规则是通过主键id进行取 ...
- 分库分表之ShardingSphere
目录 分库分表诞生的前景 分库分表的方式(垂直拆分,水平复制) 1.垂直拆分 1.1 垂直分库 1.2 垂直分表 2.水平拆分 2.1 水平分库 2.2 水平分表 分库分库中间件 ShardingSp ...
- mysql 分库分表 ~ ShardingSphere生态圈
一 简介 Apache ShardingSphere是一款开源的分布式数据库中间件组成的生态圈二 成员包含 Sharding-JDBC是一款轻量级的Java框架,在JDBC层提供上述核心功能 ...
- 分库分表利器——sharding-sphere
背景 得不到的东西让你彻夜难眠,没有尝试过的技术让我跃跃欲试. 本着杀鸡焉用牛刀的准则,我们倡导够用就行,不跟风,不盲从. 所以,结果就是我们一直没有真正使用分库分表.曾经好几次,感觉没有分库分表(起 ...
- 分库分表(2) --- ShardingSphere(理论)
ShardingSphere---理论 ShardingSphere在中小企业需要分库分表的时候用的会比较多,因为它维护成本低,不需要额外增派人手;而且目前社区也还一直在开发和维护,还算是比较活跃. ...
- 分库分表(3) ---SpringBoot + ShardingSphere 实现读写分离
分库分表(3)---ShardingSphere实现读写分离 有关ShardingSphere概念前面写了两篇博客: 1.分库分表(1) --- 理论 2. 分库分表(2) --- ShardingS ...
- 分库分表(4) ---SpringBoot + ShardingSphere 实现分表
分库分表(4)--- ShardingSphere实现分表 有关分库分表前面写了三篇博客: 1.分库分表(1) --- 理论 2.分库分表(2) --- ShardingSphere(理论) 3.分库 ...
- 分库分表(5) ---SpringBoot + ShardingSphere 实现分库分表
分库分表(5)--- ShardingSphere实现分库分表 有关分库分表前面写了四篇博客: 1.分库分表(1) --- 理论 2.分库分表(2) --- ShardingSphere(理论) 3. ...
- 分库分表(6)--- SpringBoot+ShardingSphere实现分表+ 读写分离
分库分表(6)--- ShardingSphere实现分表+ 读写分离 有关分库分表前面写了五篇博客: 1.分库分表(1) --- 理论 2.分库分表(2) --- ShardingSphere(理论 ...
- Springboot2.x + ShardingSphere 实现分库分表
之前一篇文章中我们讲了基于Mysql8的读写分离(文末有链接),这次来说说分库分表的实现过程. 概念解析 垂直分片 按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用. 在拆分之前 ...
随机推荐
- 手动删除了Linux下syslog--/var/log/messages怎么办?
引言 Linux小白很容易犯得一个错误就是:查看日志的时候,尤其是系统日志,由于日志太多,把系统日志手动删除了.也就是把/var/log/messages文件删除了,而不是删除文件的内容.直接删除文件 ...
- 曲线艺术编程 coding curves 第十一章 玫瑰花形( ROSES)
第十一章 玫瑰花形 ROSES 原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(sheldo ...
- Kubernetes(k8s) Web-UI界面(二):部署和访问Kuboard
目录 一.系统环境 二.前言 三.Kuboard简介 四.部署Kuboard 五.访问kuboard 六.总结 七.附加信息 一.系统环境 本文主要基于Kubernetes1.21.9和Linux操作 ...
- 2023年最具威胁的25种安全漏洞(CWE TOP 25)
摘要: CWE Top 25 是通过分析美国国家漏洞数据库(NVD)中的公共漏洞数据来计算的,以获取前两个日历年 CWE 弱点的根本原因映射. 本文分享自华为云社区<2023年最具威胁的25种安 ...
- Hexo博客Next主题valine评论系统邮件提醒
简介 Valine:一款快速.简洁且高效的无后端评论系统. Valine-Admin Github 项目地址,具体教程以 最新版 为准 Valine-Admin项目地址 简介 Valine Admin ...
- 二分查找非递归Algorithm(java)
二分查找的适用条件 二分查找只适用于有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找 二分查找的运行时间为对数时间O(LONG2 N) 二分查找非递归的实现 /** * @param ...
- PostgreSQL 10 文档: PostgreSQL 客户端工具
PostgreSQL 客户端应用 这部份包含PostgreSQL客户端应用和工具的参考信息.不是所有这些命令都是通用工具,某些需要特殊权限.这些应用的共同特征是它们可以被运行在任何主机上,而不管数 ...
- 长连接:chatgpt流式响应背后的逻辑
一.前言: 提起长连接,我们并不陌生,最常见的长连接非websocket莫属了.即使没有在项目中实际用过,至少也应该有所接触.长连接指在一次网络通信中,客户端与服务器之间建立一条持久的连接,可以在多次 ...
- 【go语言】1.1.2 Go 语言的特性
1. 简洁的语法 Go 语言的语法设计上非常简洁明了,没有复杂的继承和泛型,也没有异常处理,但这并不影响它的功能性和表达力.这使得 Go 语言容易学习和使用. 例如,以下是一个简单的 Go 函数,用于 ...
- 数据库是要拿来用的,不是用来PK先进性的
周五参加了WAIC后又和一家上海本地的数据库厂商交流了一下午.等我要买高铁票回南京的时候已经买不到票了.好不容易刷到一张到苏州北的高铁票,我就上了车.上车后突然想起还不如就回苏州老家住一晚算了.到家后 ...