模拟场景,公司表(不分表), 员工表与人员表根据租户标志分为多个表

项目主要根据官方文档编写
官方文档
建议大家根据官方文档配置其他的分库,读写分离等

项目pom信息

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.6</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.aiwenoyo.demo</groupId><artifactId>sharding</artifactId><version>0.0.1-SNAPSHOT</version><name>sharding</name><description>分库分表</description><properties><java.version>1.8</java.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-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>5.0.1</version></dependency><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.1.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

实体信息

ShareCompany

@Data
@Entity
public class ShareCompany {@Id@Column(length = 64)@GeneratedValue(generator = "uuidGenerator")@GenericGenerator(name="uuidGenerator", strategy="org.hibernate.id.UUIDGenerator")private String id;@Column(length = 100)private String companyName;@Column(length = 64, nullable = false)private String tenantId;public ShareCompany() {}public ShareCompany(String companyName, String tenantId) {this.companyName = companyName;this.tenantId = tenantId;}
}

ShareEmployee

package com.aiwenoyo.demo.sharding.entity;import lombok.Data;
import org.hibernate.annotations.GenericGenerator;import javax.persistence.*;@Data
@Entity
public class ShareEmployee {@Id@Column(length = 64)private String id;@ManyToOne@JoinColumn(name = "company_id")private ShareCompany company;@ManyToOne@JoinColumn(name = "user_id")private ShareUser user;@Column(length = 100)private String empName;@Columnprivate Integer tenantId;public ShareEmployee() {}public ShareEmployee(ShareCompany company, ShareUser user, String empName, Integer tenantId) {this.company = company;this.user = user;this.empName = empName;this.tenantId = tenantId;}public ShareEmployee(String id, ShareCompany company, ShareUser user, String empName, Integer tenantId) {this.id = id;this.company = company;this.user = user;this.empName = empName;this.tenantId = tenantId;}
}

ShareUser

package com.aiwenoyo.demo.sharding.entity;import lombok.Data;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;@Data
@Entity
public class ShareUser {@Id@Column(length = 64)private String id;@Column(length = 20)private String userCode;@Column(length = 100)private String userName;@Columnprivate Integer tenantId;public ShareUser() {}public ShareUser(String userCode, String userName, Integer tenantId) {this.userCode = userCode;this.userName = userName;this.tenantId = tenantId;}public ShareUser(String id, String userCode, String userName, Integer tenantId) {this.id = id;this.userCode = userCode;this.userName = userName;this.tenantId = tenantId;}
}

数据操作DAO

package com.aiwenoyo.demo.sharding.dao;import com.aiwenoyo.demo.sharding.entity.ShareCompany;
import org.springframework.data.jpa.repository.JpaRepository;public interface ShareCompanyDao extends JpaRepository<ShareCompany, String> {}
package com.aiwenoyo.demo.sharding.dao;import com.aiwenoyo.demo.sharding.entity.ShareEmployee;
import com.aiwenoyo.demo.sharding.model.ShareQueryModel;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;import java.util.List;public interface ShareEmployeeDao extends JpaRepository<ShareEmployee, String> {@Query("select new com.aiwenoyo.demo.sharding.model.ShareQueryModel(c.id, c.companyName, e.id, e.empName, u.id, u.userCode, u.userName, e.tenantId)" +" from ShareCompany c" +" inner join ShareEmployee e on e.company = c" +" left join ShareUser u on e.user = u and e.tenantId = u.tenantId")List<ShareQueryModel> queryAllExt();@Query("select new com.aiwenoyo.demo.sharding.model.ShareQueryModel(c.id, c.companyName, e.id, e.empName, u.id, u.userCode, u.userName, e.tenantId)" +" from ShareCompany c" +" inner join ShareEmployee e on e.company = c" +" left join ShareUser u on e.user = u and e.tenantId = u.tenantId")Page<ShareQueryModel> queryAllExt(Pageable pageable);
}
package com.aiwenoyo.demo.sharding.dao;import com.aiwenoyo.demo.sharding.entity.ShareUser;
import org.springframework.data.jpa.repository.JpaRepository;public interface ShareUserDao extends JpaRepository<ShareUser, String> {}

查询模型

package com.aiwenoyo.demo.sharding.model;import lombok.Data;@Data
public class ShareQueryModel {private String companyId;private String companyName;private String employeeId;private String empName;private String userId;private String userCode;private String userName;private Integer tenantId;public ShareQueryModel() {}public ShareQueryModel(String companyId, String companyName,String employeeId, String empName,String userId, String userCode, String userName, Integer tenantId) {this.companyId = companyId;this.companyName = companyName;this.employeeId = employeeId;this.empName = empName;this.userId = userId;this.userCode = userCode;this.userName = userName;this.tenantId = tenantId;}
}

application.properties


server.port=6080#thymeleaf start
spring.thymeleaf.mode=HTML
spring.thymeleaf.encoding=UTF-8
#开发时关闭缓存,不然没法看到实时页面
spring.thymeleaf.cache=false
#thymeleaf endspring.shardingsphere.enabled=true
spring.shardingsphere.datasource.names=master
spring.shardingsphere.datasource.master.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.master.jdbc-url=jdbc:mysql://localhost:3306/pumkin_study?serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=utf8&nullCatalogMeansCurrent=true&zeroDateTimeBehavior=convertToNull
spring.shardingsphere.datasource.master.username=root
spring.shardingsphere.datasource.master.password=000000spring.shardingsphere.rules.sharding.binding-tables[0]=share_employee,share_userspring.shardingsphere.rules.sharding.tables.share_employee.actual-data-nodes=master.share_employee$->{1..5}
spring.shardingsphere.rules.sharding.tables.share_employee.table-strategy.standard.sharding-column=tenant_id
spring.shardingsphere.rules.sharding.tables.share_employee.table-strategy.standard.sharding-algorithm-name=share-employee-sharding
spring.shardingsphere.rules.sharding.sharding-algorithms.share-employee-sharding.type=INLINE
spring.shardingsphere.rules.sharding.sharding-algorithms.share-employee-sharding.props.algorithm-expression=share_employee$->{tenant_id}
spring.shardingsphere.rules.sharding.tables.share_employee.key-generate-strategy.column=id
spring.shardingsphere.rules.sharding.tables.share_employee.key-generate-strategy.key-generator-name=snowflakespring.shardingsphere.rules.sharding.tables.share_user.actual-data-nodes=master.share_user$->{1..5}
spring.shardingsphere.rules.sharding.tables.share_user.table-strategy.standard.sharding-column=tenant_id
spring.shardingsphere.rules.sharding.tables.share_user.table-strategy.standard.sharding-algorithm-name=share-user-sharding
spring.shardingsphere.rules.sharding.sharding-algorithms.share-user-sharding.type=INLINE
spring.shardingsphere.rules.sharding.sharding-algorithms.share-user-sharding.props.algorithm-expression=share_user$->{tenant_id}
spring.shardingsphere.rules.sharding.tables.share_user.key-generate-strategy.column=id
spring.shardingsphere.rules.sharding.tables.share_user.key-generate-strategy.key-generator-name=snowflakespring.shardingsphere.rules.sharding.key-generators.snowflake.type=SNOWFLAKEspring.shardingsphere.props.sql-show=true#JPA 配置
spring.jpa.hibernate.ddl-auto=none
#在事务外也可以访问懒加载的数据
spring.jpa.open-in-view=true
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true#logging.level.root=DEBUG

测试

  1. 数据插入
  2. 没有租户的查询
  3. 有租户字段的查询
  4. 分页查询
  5. 数据删除
  6. 数据更新

ShardingSphere5.1.0 +JPA的分表配置相关推荐

  1. mysql查逻辑表的分片规则_MySQL(19) Mycat分片(分库分表)配置

    一.前言 本文将基于主从复制,读写分离的环境基础上进行一个简单的分片(分库分表)配置 二.Mycat分片配置 mycat分片主要在scheam.xml,rule.xml这2个表中配置 ① scheam ...

  2. Linux+MySQL+MyCat实现分库分表,通过MyCat数据库中间件实现分库分表配置实战

    目录 前言 Linux+MySQL+MyCat实现读写分离,主从同步的解决方案 一.Linux下MySQL数据库服务的安装与部署 二.下载Linux MyCat 三.上传Linux服务器,并解压 四. ...

  3. 淘宝TDDL——Matrix层的分库分表配置与实现

    http://gao-xianglong.iteye.com/blog/2019729/ 目录 一.互联网当下的数据库拆分过程 二.TDDL的架构原型 三.下载TDDL的Atom层和Group层源代码 ...

  4. mysql bdb_MySQL在Red Hat 7.0上的BDB表配置

    MySQL在Red Hat 7.0上的BDB表配置[@more@]注意:本文还处于Beta版本! 很多人对于MySQL一个最大的误解就是MySQL的事务处理功能. 从MySQL 3.23开始,就开始支 ...

  5. mycat从0到成功进行分表操作

    1.安装mysql,先检查集群中是否存在 mysql --version 或使用rpm -qa | grep mysql查看 如不存在,则参考mysql安装 启动mysql服务(systemctl s ...

  6. mysql分区表mycat_MySQL 中间件之Mycat垂直分表配置

    垂直分表就是将一个库下的多个表拆分到多个MySQL实例,实现库压力分流. 通过GTID模式复制,db01与db02之间不进行任何连接与复制 当前环境: mycat --> db01与db02 d ...

  7. Jboot v1.4.0 新增分库分表及 websocket 相关 demo

    Jboot 是一个基于 JFinal 和 Undertow 开发的微服务框架.提供了 AOP.RPC.分布式缓存.限流.降级.熔断.统一配置中心.Opentracing 数据追踪.metrics 数据 ...

  8. mysql分库分表配置命令_mysql分库分表中间件Heisenberg

    "trans_shard"> "trans_online, trans_content, trans_tb "dataNode="transDN ...

  9. mycat分库分表配置

    1.什么是分库分表 在同一个系统(项目)中,把一张数据比较多的表放到不同的集群节点上,这种模式就称之为分库分表 2.需求 使用mycat实现分库分表(HDFS:namenode datanode se ...

最新文章

  1. Ubuntu下SSH设置
  2. iOS 关于第三方键盘
  3. Android--Otto事件总线 -- 组件之间通讯框架使用 --模式解析
  4. 关于VS中区分debug与release,32位与64位编译的宏定义
  5. sysbench 一些选项参数记录
  6. where to find fundings as an MPhil student?
  7. 图片上传压缩android,android 图片上传压缩常见问题分析
  8. 产品经理必须知道的一点知识:三种方法判断一个产品该不该做
  9. 仿qq邮箱源码程序_小伙子利用C++实现邮件程序发送和接收
  10. docker启动tomcat容器并添置项目首页
  11. MFC基础之字符集,Unicode字符集,多字节字符集
  12. 苹果手机识别图片文字方法
  13. novatel中DGPS和RTK以及ppp的terrraStar-x的记录
  14. 设计模式 英文名Design Pattern
  15. 【高级篇 / System】(7.0) ❀ 04. 高可用性 HA 配置 ❀ FortiGate 防火墙
  16. ISCC2021wp
  17. 海信85u8e和海信85e7f有什么区别 哪个好详细性能配置对比
  18. Android Studio报错--Error: Library projects cannot set applicationId. applicationId is set to ...
  19. 六款好用的Mac最流行的开发工具,程序员必看~
  20. 编辑距离算法原理及其实现

热门文章

  1. win10环境向移动固态硬盘安装Ubuntu 18.04.3 LTS系统(即插即用)
  2. 三十六 我在软件园的那些日子里
  3. 中国移动网站控件引发的蓝屏问题分析
  4. outlook你的邮件服务器证书无效,outlook, webmail.xxx.com 证书无效过期,无法连接到服务器,outlook无法收发邮件...
  5. vue 传参 微信_小猿圈web前端之微信小程序页面间跳转传参方式总结
  6. 网络诈骗侦查公司41st Parameter获1300万美元投资 Kleiner Perkins参投
  7. 翻译:Swift 5创建和使用Framework, XCFramework 从入门到精通
  8. ios swift MVVM实例(Model-View-ViewModel)
  9. java中for break的用法_java break语句的使用方法
  10. 增强现实与虚拟现实_增强现实相关的法律问题