首页 > 其他分享 >Mybatisplus3.5.1+shardingsphere-jdbc5.1.1分表

Mybatisplus3.5.1+shardingsphere-jdbc5.1.1分表

时间:2023-05-20 18:00:38浏览次数:46  
标签:COMMENT jdbc Mybatisplus3.5 DEFAULT shardingsphere ID sharding jdbc5.1 id

注意使用雪花ID的话,查询ID时候必须使用long类型的ID,不要使用MP自带的默认的Serializable类型。否则会提示分片主键id数据类型和分片算法不匹配Inline sharding algorithms expression xxx and sharding column xx not 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);
    }

测试效果!!

新增

image

查询

image

捯饬结束!!!!!整合成功!!!

标签:COMMENT,jdbc,Mybatisplus3.5,DEFAULT,shardingsphere,ID,sharding,jdbc5.1,id
From: https://www.cnblogs.com/gtnotgod/p/17417565.html

相关文章

  • ShardingSphere + Pagehelper 组合sql查询中包含 DISTINCT GROUP BY 等关键字和聚合函
    Pagehelper中配置说明params:为了支持startPage(Objectparams)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值,可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值,默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;r......
  • 叮!新栏目上线|ShardingSphere 「社区圆桌会」闪亮来袭!
    一、嗨!社区的新栏目来啦!你想要深入了解ShardingSphere、与业内技术大咖「面对面」探讨数据库领域的前沿趋势吗?那就一定不能错过由ShardingSphere社区出品、SphereEx公司赞助的全球软件工程师必看的直播节目——《对谈时刻》!每期节目,我们都会邀请三位业内表现出色的技术精......
  • 达梦数据库使用ShardingSphere
     ShardingSphere只支持主流数据库,国产的数据库并不支持,就比如达梦数据库,所以我们自己扩展。1.下载shardingsphere源码下载地址:https://github.com/apache/shardingsphere进入网址后,选择自己使用的Tags分支,并下载代码。我使用的版本是4.0.0-RC2再下载代码,......
  • 终于有人把openGauss3.0.0分布式原理讲透了,openGauss X ShardingSphere分布式原理和部
    本文为原理精讲,部署文章链接如下https://www.cnblogs.com/opengauss/p/17364285.html一、opengauss的背景和行业现状2022年,七大openGauss商业版发布,是基于openGauss3.0推出商业发行版目前海量数据库Vastbase表现最佳,一直是TOP1作者认为之所以海量数据库Vastbase......
  • 终于有人把openGauss3.0.0分布式原理讲透了,openGauss X ShardingSphere分布式原理和部
    本文为原理精讲,部署文章链接如下https://blog.51cto.com/u_13808894/6236819一、opengauss的背景和行业现状2022年,七大openGauss商业版发布,是基于openGauss3.0推出商业发行版目前海量数据库Vastbase表现最佳,一直是TOP1作者认为之所以海量数据库Vastbase目前无法被同......
  • 「独家解析」ShardingSphere分库分表技术实践,助力MySQL性能提升
    ApacheShardingSphere是一个开源的分布式数据库中间件解决方案组成的生态圈。它由三个产品组成:JDBC、Proxy和Sidecar。这些产品相互独立,但可以混合部署和配合使用,以提供标准化的数据分片、分布式事务和数据库治理功能。JDBC是ShardingSphere的基础组件,提供数据分片和读写分......
  • 3、ShardingSphere实战(三)
    一、前言:本项目按照时间字段进行分表,需要提前将主表写入数据库优势:1、实现自动建表,且不需要配置SQL2、范围分表查询时自动排除不存在的表 二、项目实战:1、创建主表:CREATETABLE`t_user`(`id`bigint(32)NOTNULL,`name`varchar(255)DEFAULTNULL,`create_a......
  • 2、ShardingSphere中间件(二)
    一、ShardingSphere中间件:1、简介:(1)、概述:ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar这三款相互独立的产品组成。他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异......
  • 分库分表之ShardingSphere
    为什么要分库分表用户请求量太大单服务器TPS、内存、IO都是有上限的,需要将请求打散分布到多个服务器。单库数据量太大单个数据库处理能力有限;单库所在服务器的磁盘空间有限;单库上的操作IO有瓶颈。单表数据量太大查询、插入、更新操作都会变慢,在加字段、加......
  • ShardingSphereJDBC+MybatisPlus实现分库分表
    前言这篇是ShardingSphere-JDBC+Springboot+MybatisPlus+Druid分库分表的简单例子,我们用一个订单表为例,通过简单配置实现数据分片到多个数据库的多个表中。主要配置和代码已经在文中给出,完整例子可以参考GitHub-fruitbasket-litchi-shardingjdbc。准备数据库在一个或两个My......