当前位置:网站首页>ShardingSphere's vertical sub-database sub-table actual combat (5)
ShardingSphere's vertical sub-database sub-table actual combat (5)
2022-07-31 00:49:00 【Rongji】
概述
场景
建库、建表
CREATE TABLE `t_user` (
`user_id` bigint(20) NOT NULL,
`username` varchar(255) DEFAULT NULL,
`ustatus` varchar(255) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Springboot环境搭建
编写代码
创建User实体类、mapper
package com.study.shardingjdbcdemo.entity;
import lombok.Data;
import javax.persistence.Id;
import javax.persistence.Table;
@Data
@Table(name = "t_user")
public class User {
@Id
private Long userId;
private String username;
private String ustatus;
}
package com.study.shardingjdbcdemo.mapper;
import com.study.shardingjdbcdemo.entity.User;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;
@Repository
public interface UserMapper extends Mapper<User> {
}
application.properties配置
# 配置分片策略
# 配置数据源
spring.shardingsphere.datasource.names=m0,m1,m2
spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m1.url=jdbc:mysql://localhost:3306/edu_db_1?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m1.username=root
spring.shardingsphere.datasource.m1.password=123456
spring.shardingsphere.datasource.m2.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m2.url=jdbc:mysql://localhost:3306/edu_db_2?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m2.username=root
spring.shardingsphere.datasource.m2.password=123456
spring.shardingsphere.datasource.m0.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m0.url=jdbc:mysql://localhost:3306/user_db?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m0.username=root
spring.shardingsphere.datasource.m0.password=123456
# 指定course表分布情况,配置表在哪个数据库中,表名称都是什么
spring.shardingsphere.sharding.tables.course.actual-data-nodes=m$->{
1..2}.course_$->{
1..2}
# 指定course主键cid生成策略SNOWFLAKE
spring.shardingsphere.sharding.tables.course.key-generator.column=cid
spring.shardingsphere.sharding.tables.course.key-generator.type=SNOWFLAKE
# 指定表分片策略, cid是偶数添加到course_1表中,cid是奇数添加到course_2
spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-column=cid
spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expression=course_$->{
cid % 2 + 1}
# 指定库的中course表的分片策略
spring.shardingsphere.sharding.tables.course.database-strategy.inline.sharding-column=user_id
spring.shardingsphere.sharding.tables.course.database-strategy.inline.algorithm-expression=m$->{
user_id % 2 + 1}
# 指定t_user表分布情况,配置表在哪个数据库中,表名称都是什么
spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=m0.t_user
# 指定t_user主键user_id生成策略SNOWFLAKE
spring.shardingsphere.sharding.tables.t_user.key-generator.column=user_id
spring.shardingsphere.sharding.tables.t_user.key-generator.type=SNOWFLAKE
# 指定表分片策略
spring.shardingsphere.sharding.tables.t_user.table-strategy.inline.sharding-column=user_id
spring.shardingsphere.sharding.tables.t_user.table-strategy.inline.algorithm-expression=t_user
# 打开sql输出日志
spring.shardingsphere.props.sql.show=true
# 解决一个Course实体类不能对应两张表的问题
spring.main.allow-bean-definition-overriding=true
测试
@Test
void addUser() {
for (int i = 0; i < 10; i++) {
User user = new User();
user.setUsername("lucy");
user.setUstatus("good");
userMapper.insertSelective(user);
}
}
@Test
public void findUser() {
Example example = new Example(User.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("userId", 760195997497294849L);
User user = userMapper.selectOneByExample(example);
System.out.println(user);
}
边栏推荐
- Understand from the 11 common examples of judging equality of packaging types in the written test: packaging types, the principle of automatic boxing and unboxing, the timing of boxing and unboxing, a
- Kotlin协程:协程上下文与上下文元素
- XSS related knowledge
- 【Yugong Series】July 2022 Go Teaching Course 017-IF of Branch Structure
- Adding, deleting, modifying and checking the foundation of MySQL
- In-depth understanding of the auto-increment operator from two error-prone written test questions
- TypeScript在使用中出现的问题记录
- Solution: Parameter 0 of method ribbonServerList in com.alibaba.cloud.nacos.ribbon.NacosRibbonClientConfigu
- Neural Network (ANN)
- binglog log tracking: data backup and backup tracking
猜你喜欢
Problem record in the use of TypeScript
registers (assembly language)
MySQL master-slave replication and read-write separation script - pro test available
typescript17 - function optional parameters
BOM系列之Navigator对象
Go 学习笔记(84)— Go 项目目录结构
ShardingSphere's public table combat (7)
typescript16-void
响应式布局与px/em/rem的比对
[In-depth and easy-to-follow FPGA learning 13---------Test case design 1]
随机推荐
DOM系列之scroll系列
【愚公系列】2022年07月 Go教学课程 019-循环结构之for
registers (assembly language)
MySQL notes under
Error ER_NOT_SUPPORTED_AUTH_MODE Client does not support authentication protocol requested by serv
Image processing tool design
MySql数据恢复方法个人总结
ELK部署脚本---亲测可用
The difference between truncate and delete in MySQL database
查看zabbix-release-5.0-1.el8.noarch.rpm包内容
XSS related knowledge
Typescript18 - object type
MySql data recovery method personal summary
Bypass of xss
redis学习
MySQL table design for message queue to store message data
Error occurred while trying to proxy request The project suddenly can't get up
typescript9 - common base types
MySQL grant statements
MySQL Series 1: Account Management and Engine