5、ShardingSphere 之 公共表

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
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章