栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

创建springboot项目(我这里版本是 2.6.6)


在项目pom.xml添加配置
 	
        8
        8
        8
        3.4.2
        4.1.1
        8.0.27
    
	
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-configuration-processor
            true
        
        
            org.projectlombok
            lombok
            true
        

        
        
            com.baomidou
            mybatis-plus-boot-starter
            ${mybatisplus.boot.starter.version}
        

        
            mysql
            mysql-connector-java
            ${mysql.version}
        

        
            org.apache.shardingsphere
            sharding-jdbc-spring-boot-starter
            ${sharding-jdbc.version}
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    
application.properties文件配置
spring.application.name=demo-sharding-jdbc
server.port=8080


# 打印执行的数据库以及语句
spring.shardingsphere.props.sql.show=true

#配置数据源 db0 多个数据源逗号隔开 例如: ds0,ds1
spring.shardingsphere.datasource.names=ds0

# 配置数据库参数
spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://127.0.0.1:3306/shop_order_0?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=123456



# 配置逻辑表 product_order workid 用于解决分表id重复问题
spring.shardingsphere.sharding.tables.product_order.key-generator.props.worker.id=1

#id生成策略
spring.shardingsphere.sharding.tables.product_order.key-generator.column=id
spring.shardingsphere.sharding.tables.product_order.key-generator.type=SNOWFLAKE

#配置数据节点
spring.shardingsphere.sharding.tables.product_order.actual-data-nodes=ds0.product_order_$->{0..1}

#配置分片键  分片算法(通过订单id取余)
spring.shardingsphere.sharding.tables.product_order.table-strategy.inline.sharding-column=id
spring.shardingsphere.sharding.tables.product_order.table-strategy.inline.algorithm-expression=product_order_$->{id % 2}
ProductOrderMapper 操作类
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.demo.shardingspherejdbcdemo.model.ProductOrderDO;


public interface ProductOrderMapper extends BaseMapper {
}

ProductOrderDO 实体类
import java.util.Date;

@Data
@TableName("product_order")
public class ProductOrderDO {
    
    private Long id;
    
    private String outTradeNo;
    
    private String state;
    
    private Date createTime;
    
    private Double payAmount;
    
    private String nickname;
    
    private Long userId;

}
springboot 启动类添加注解
@MapperScan("mapper所在路径")
@EnableTransactionManagement
订单表结构sql
CREATE TABLE `product_order_0` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `out_trade_no` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '订单id',
  `state` varchar(11) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '',
  `create_time` datetime DEFAULT NULL COMMENT '订单创建时间',
  `pay_amount` decimal(16,2) DEFAULT NULL COMMENT '订单实际支付价格',
  `nickname` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '昵称',
  `user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1516412560359845891 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;
对应表 库结构

测试添加订单数据

@SpringBootTest
class ShardingsphereJdbcDemoApplicationTests {
    @Autowired
    private ProductOrderMapper productOrderMapper;
    @Test
    void onlyProductSaveTest() {
        //单个库 水平分表
        Random random  = new Random();
        for(int i = 0 ; i < 10; i ++){
            ProductOrderDO productOrderDO = new ProductOrderDO();
//            productOrderDO.setId(0L);
            productOrderDO.setOutTradeNo(UUID.randomUUID().toString().replace("-",""));
            productOrderDO.setState("NEW");
            productOrderDO.setCreateTime(new Date());
            productOrderDO.setPayAmount(Double.valueOf(100+i));
            productOrderDO.setNickname(String.format("用户[%s]",i+""));
            productOrderDO.setUserId(Long.valueOf(random.nextInt(100)));

            productOrderMapper.insert(productOrderDO);
        }
    }

}
插入的订单数据

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/822024.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号