【Sharding-JDBC 】(四)整合mybatis-plus 公共表

概念:

       公共表屬於系統中數據量較小,變動少,而且屬於高頻聯合查詢的依賴表。參數表、數據字典表等屬於此類型。可 以將這類表在每個數據庫都保存一份,所有更新操作都同時發送到所有分庫執行。

數據庫:

數據庫腳本:(兩個服務器的user_db庫下均新增t_dict表)

(1)創建數據庫
分別在user_db、order_db_1、order_db_2中創建t_dict表:

CREATE TABLE `t_dict` (
`dict_id` bigint(20) NOT NULL COMMENT '字典id',
`type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典類型',
`code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典編碼',
`value` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典值',
PRIMARY KEY (`dict_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

實體類:

package com.lucifer.sharding.pojo;

import java.io.Serializable;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

/**
 * t_dict
 * @author 
 */
@Data
@TableName(value = "t_dict")
public class Dict implements Serializable {
    /**
     * 字典id
     */
    private Long dictId;

    /**
     * 字典類型
     */
    private String type;

    /**
     * 字典編碼
     */
    private String code;

    /**
     * 字典值
     */
    private String value;

    private static final long serialVersionUID = 1L;
}

DictDao接口: 

package com.lucifer.sharding.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lucifer.sharding.pojo.Dict;

public interface DictDao extends BaseMapper<Dict> {
}

application.yml: 

############################公共表#################################
#服務端口
server:
  port: 56081
#服務名
spring:
  application:
    name: sharding-jdbc-examples
  main:
    allow-bean-definition-overriding: true
  #shardingsphere相關配置
  shardingsphere:
    datasource:
      names: m1,m2   #配置庫的名字,隨意
      m1:   #配置目前m1庫的數據源信息
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://192.168.87.133:3306/user_db?useUnicode=true
        username: root
        password: 123456
      m2:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://192.168.87.134:3306/user_db?useUnicode=true
        username: root
        password: 123456
    sharding:
      broadcast‐tables: t_dict  #公共表
      tables:
        t_dict:
          key-generator:
            column: dict_id
            type: SNOWFLAKE
    props:
      sql:
        show: true   #打印sql


#日誌打印
logging:
  level:
    root: info
    org.springframework.web: info
    com.lucifer.sharding.dao: debug
    druid.sql: debug

測試:

package com.lucifer.sharding;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.lucifer.sharding.dao.DictDao;
import com.lucifer.sharding.dao.OrderDao;
import com.lucifer.sharding.pojo.Dict;
import com.lucifer.sharding.pojo.Order;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {ShardingJdbcExamplesApplication.class})
public class ShardingJdbcExamplesApplicationTests {

    @Resource
    DictDao dictDao;

    @Test
    public void add() {
        Dict dict = new Dict();
        dict.setCode("111");
        dict.setType("性別");
        dict.setValue("男");
        dictDao.insert(dict);
    }

    @Test
    public void delete() {
        QueryWrapper<Dict> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("dict_id",418778126634450945L);
        dictDao.delete(queryWrapper);
    }

}

1.add  測試新增方法,Sharding-JDBC會在分庫中都執行一下;

2.delete:測試刪除方法,Sharding-JDBC會在分庫中都執行一下;

 

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