springboot整合shardingsphere-jdbc MybatisPlus行表达式水平分库分表

如题所述

第1个回答  2024-09-19
在项目pom.xml添加配置<properties><java.version>8</java.version><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><mybatisplus.boot.starter.version>3.4.2</mybatisplus.boot.starter.version><sharding-jdbc.version>4.1.1</sharding-jdbc.version><mysql.version>8.0.27</mysql.version></properties>

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--mybatisplus和springboot整合--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatisplus.boot.starter.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>${sharding-jdbc.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

application.properties文件配置spring.application.name=demo-sharding-jdbcserver.port=8080#打印执行的数据库以及语句spring.shardingsphere.props.sql.show=true#配置数据源db0多个数据源逗号隔开例如:ds0,ds1spring.shardingsphere.datasource.names=ds0,ds1#配置数据库1参数spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSourcespring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driverspring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://192.168.2.66:3306/shop_order_0?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=truespring.shardingsphere.datasource.ds0.username=rootspring.shardingsphere.datasource.ds0.password=123456#配置数据库2参数spring.shardingsphere.datasource.ds1.type=com.zaxxer.hikari.HikariDataSourcespring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driverspring.shardingsphere.datasource.ds1.jdbc-url=jdbc:mysql://192.168.2.66:3306/shop_order_1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=truespring.shardingsphere.datasource.ds1.username=rootspring.shardingsphere.datasource.ds1.password=123456#配置分库规则spring.shardingsphere.sharding.tables.product_order.database-strategy.inline.sharding-column=user_idspring.shardingsphere.sharding.tables.product_order.database-strategy.inline.algorithm-expression=ds$->{user_id%2}#配置workidspring.shardingsphere.sharding.tables.product_order.key-generator.props.worker.id=1#id生成策略spring.shardingsphere.sharding.tables.product_order.key-generator.column=idspring.shardingsphere.sharding.tables.product_order.key-generator.type=SNOWFLAKE#配置数据节点spring.shardingsphere.sharding.tables.product_order.actual-data-nodes=ds$->{0..1}.product_order_$->{0..1}#指定product_order表的分片策略,分片策略包括【分片键和分片算法】spring.shardingsphere.sharding.tables.product_order.table-strategy.inline.sharding-column=idspring.shardingsphere.sharding.tables.product_order.table-strategy.inline.algorithm-expression=product_order_$->{id%2}

表结构CREATETABLE`product_order_1`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`out_trade_no`varchar(64)COLLATEutf8mb4_binDEFAULTNULLCOMMENT'订单唯一标识',`state`varchar(11)COLLATEutf8mb4_binDEFAULTNULLCOMMENT'NEW未支付订单,PAY已经支付订单,CANCEL超时取消订单',`create_time`datetimeDEFAULTNULLCOMMENT'订单生成时间',`pay_amount`decimal(16,2)DEFAULTNULLCOMMENT'订单实际支付价格',`nickname`varchar(64)COLLATEutf8mb4_binDEFAULTNULLCOMMENT'昵称',`user_id`bigint(20)DEFAULTNULLCOMMENT'用户id',PRIMARYKEY(`id`)USINGBTREE)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_binROW_FORMAT=DYNAMIC;

数据库表结构图

ProductOrderMapper 操作类importcom.baomidou.mybatisplus.core.mapper.BaseMapper;importcom.demo.shardingspherejdbcdemo.model.ProductOrderDO;/***订单操作dao类*/publicinterfaceProductOrderMapperextendsBaseMapper<ProductOrderDO>{}

ProductOrderDO 实体类importjava.util.Date;@Data@TableName("product_order")publicclassProductOrderDO{/***订单id*/privateLongid;/***交易流水号*/privateStringoutTradeNo;/***状态*/privateStringstate;/***创建时间*/privateDatecreateTime;/***支付金额*/privateDoublepayAmount;/***用户昵称*/privateStringnickname;/****用户id*/privateLonguserId;}

springboot 启动类添加注解@MapperScan("mapper所在路径")@EnableTransactionManagement

测试添加订单数据

@SpringBootTestclassShardingsphereJdbcDemoApplicationTests{@AutowiredprivateProductOrderMapperproductOrderMapper;@TestvoidonlyProductSaveTest(){//单个库水平分表Randomrandom=newRandom();for(inti=0;i<10;i++){ProductOrderDOproductOrderDO=newProductOrderDO();//productOrderDO.setId(0L);productOrderDO.setOutTradeNo(UUID.randomUUID().toString().replace("-",""));productOrderDO.setState("NEW");productOrderDO.setCreateTime(newDate());productOrderDO.setPayAmount(Double.valueOf(100+i));productOrderDO.setNickname(String.format("用户[%s]",i+""));productOrderDO.setUserId(Long.valueOf(random.nextInt(100)));productOrderMapper.insert(productOrderDO);}}}

插入的订单数据表shop_order_0.product_order_0

表shop_order_0.product_order_1

表shop_order_1.product_order_0

表shop_order_1.product_order_1

原文:https://juejin.cn/post/7095644932219600903

logo设计

创造品牌价值

¥500元起

APP开发

量身定制,源码交付

¥2000元起

商标注册

一个好品牌从商标开始

¥1480元起

公司注册

注册公司全程代办

¥0元起

    官方电话官方服务
      官方网站八戒财税知识产权八戒服务商企业需求数字市场

springboot整合shardingsphere-jdbc MybatisPlus行表达式水平分库分表...
application.properties文件配置spring.application.name=demo-sharding-jdbcserver.port=8080#打印执行的数据库以及语句spring.shardingsphere.props.sql.show=true#配置数据源db0多个数据源逗号隔开例如:ds0,ds1spring.shardingsphere.datasource.names=ds0,ds1#配置数据库1参数spring.shardingsphere.datasource....

Springboot系列:整合Shardingjdbc实现分表、含项目实践!
在实战中,首先需要创建SpringBoot项目,并引入所需的依赖。整合MyBatis和ShardingJDBC,创建表时,按照需求将表按照水平方式进行拆分,如创建4个表,分别为order_info_0、order_info_1、order_info_2和order_info_3。接下来,需要创建Entity、Mapper和Mapper.xml等文件,并在application.yaml中配置Sharding...

ShardingSphere之SpingBoot整合Sharding-JDBC进行数据单主节点读写...
ShardingSphere整合SpringBoot实现数据读写分离和分库分表读写分离是一种通过主从配置,将查询请求分散到多个副本的策略,旨在提升系统的处理能力并实现高可用和扩展性。主从架构中,主库和从库内容相同,SQL语句根据路由规则执行;而在分库分表架构中,数据根据配置进行切分,库与表内容各异,同样依赖路由策略。

SpringBoot手把手分库分表实例
综上所述,通过ShardingSphere与SpringBoot的结合,开发者能够轻松实现复杂的数据库分库分表策略,不仅提升数据库性能,还能有效管理数据的分布和一致性。在实际应用中,通过细致的配置和策略选择,可进一步优化数据库架构,满足多样化的业务需求。

SpringBoot 2 种方式快速实现分库分表,轻松拿捏!
一、什么是 ShardingSphere?shardingsphere 是一款开源的分布式关系型数据库中间件,为 Apache 的顶级项目。它由 sharding-jdbc 和 sharding-proxy 两个独立项目合并而成,支持多种数据库和ORM框架。二、为什么选 ShardingSphere?ShardingSphere 作为分布式数据库中间件,支持分库分表、读写分离、事务管理等...

SpringBoot+Mybatis-Plus整合Sharding-JDBC5.1.1实现分库分表【全网最新...
现在最新版已经是5.1.1,经过一天的研究用于解决了所有问题,完成了单库分表!! 想了解4.0.0版本的可以看一下小编刚刚写的:SpringBoot+Mybatis-Plus整合Sharding-JDBC4.0.0实现单库分表 如果想看mycat的可以看一下小编之前写的文章哈:Docker安装Mycat和Mysql进行水平分库分表实战...

分库分表利器之Sharding Sphere(深度好文,看过的人都说好)
都是通过配置驱动来实现的,它扩展了JDBC的原有能力,如逻辑表、真实表等概念在其中扮演重要角色。通过示例,Sharding-JDBC简化了分库分表的配置,而Spring Boot集成使其使用更加简便。Sharding-JDBC提供了多种内置的分片策略,包括自动分片、取模、哈希取模等,用户可以根据需求选择或自定义策略。

Java如何实现分库分表
具体实现步骤如下:1. **分表实现**:在MySQL数据库中创建10张用户表(tb_user_0到tb_user_9),通过JDBC操作执行建表语句。2. **依赖引入**:使用Spring Boot + Mybatis-Plus + ShardingSphere-JDBC。在项目的POM文件中,引入相应的ShardingSphere-JDBC依赖。3. **实体类和Mapper代码**:编写...

ShardingSphere 4.x FAQ
对于Cloud not resolve placeholder异常,使用行表达式标识符建议使用$->{...},避免与Spring本身的属性文件占位符冲突。在使用inline表达式时,注意Java的整数相除结果为整数,而inline表达式中的Groovy语法则返回浮点数。若需要获得除法整数结果,请使用A.intdiv(B)。若只有部分数据库分库分表,确实需要将不...

Springboot日志、配置文件、接口数据脱敏解决方案
https:\/\/github.com\/ulisesbocchio\/jasypt-spring-boot 使用方法很简单,整合SpringBoot只需要添加一个starter。1.添加依赖<dependency><groupId>com.github.ulisesbocchio<\/groupId><artifactId>jasypt-spring-boot-starter<\/artifactId><version>3.0.3<\/version><\/dependency>2.配置秘钥 在配置文件中添加一个加密的...

相似回答
大家正在搜