文章目錄
1 公共表
1.1 存儲固定數據的表,表數據很少發生變化,查詢時候經常進行關聯
1.2 在每個數據庫中創建出相同結構公共表
2 在多個數據庫中創建公共表
2.1 edudb1庫中t_dict
CREATE TABLE `edudb1`.`t_dict` (
`dict_id` BIGINT NOT NULL,
`ustatus` VARCHAR(45) NOT NULL,
`uvalue` VARCHAR(45) NOT NULL,
PRIMARY KEY (`dict_id`));
2.2 edudb2庫中t_dict
CREATE TABLE `edudb2`.`t_dict` (
`dict_id` BIGINT NOT NULL,
`ustatus` VARCHAR(45) NOT NULL,
`uvalue` VARCHAR(45) NOT NULL,
PRIMARY KEY (`dict_id`));
2.3 userdb庫中t_dict
CREATE TABLE `userdb`.`t_dict` (
`dict_id` BIGINT NOT NULL,
`ustatus` VARCHAR(45) NOT NULL,
`uvalue` VARCHAR(45) NOT NULL,
PRIMARY KEY (`dict_id`));
3 創建po
package com.ccb.sharding.po;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("t_dict")
public class Dict {
@TableId("dict_id")
private Long dictId;
private String ustatus;
private String uvalue;
public Long getDictId() {
return dictId;
}
public void setDictId(Long dictId) {
this.dictId = dictId;
}
public String getUstatus() {
return ustatus;
}
public void setUstatus(String ustatus) {
this.ustatus = ustatus;
}
public String getUvalue() {
return uvalue;
}
public void setUvalue(String uvalue) {
this.uvalue = uvalue;
}
@Override
public String toString() {
return "Dict{" +
"dictId=" + dictId +
", ustatus='" + ustatus + '\'' +
", uvalue='" + uvalue + '\'' +
'}';
}
}
4 創建mapper
package com.ccb.sharding.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ccb.sharding.po.Dict;
import org.springframework.stereotype.Repository;
@Repository
public interface DictMapper extends BaseMapper<Dict> {
}
5 創建application.properties配置文件
# sharding-JDBC分片策略(公共表配置)
# 配置數據源,給數據源命名
spring.shardingsphere.datasource.names=ds0,ds1,ds2
# 配置數據源具體內容,連接池、驅動、地址、用戶名和密碼
spring.shardingsphere.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds0.url=jdbc:mysql://localhost:3306/userdb?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=chengwen
# 配置數據源具體內容,連接池、驅動、地址、用戶名和密碼
spring.shardingsphere.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds1.url=jdbc:mysql://localhost:3306/edudb1?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=chengwen
# 配置數據源具體內容,連接池、驅動、地址、用戶名和密碼
spring.shardingsphere.datasource.ds2.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds2.url=jdbc:mysql://localhost:3306/edudb2?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.ds2.username=root
spring.shardingsphere.datasource.ds2.password=chengwen
# 一個實體類對應兩張表,覆蓋
spring.main.allow-bean-definition-overriding=true
# 配置公共表
spring.shardingsphere.sharding.broadcast-tables=t_dict
# 配置數據庫中 t_dict 表主鍵 dict_id 生成策略 SNOWFLAKE 雪花算法
spring.shardingsphere.sharding.tables.t_dict.key-generator.column=dict_id
spring.shardingsphere.sharding.tables.t_dict.key-generator.type=SNOWFLAKE
# 打印sql輸出日誌
spring.shardingsphere.props.sql.show=true
6 Test
package com.ccb.sharding;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ccb.sharding.mapper.DictMapper;
import com.ccb.sharding.po.Dict;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ShardingApplicationTests {
@Autowired
DictMapper dictMapper;
// ================= 測試公共表 ======================
@Test
public void addDict(){
Dict dict = new Dict();
dict.setUstatus("S");
dict.setUvalue("已成功");
dictMapper.insert(dict);
}
@Test
public void getDict(){
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("dict_id","1276077724019986434");
Dict dict = dictMapper.selectOne(queryWrapper);
System.out.println(dict);
}
7 Test result
edudb1
edudb2
userdb
getDict