sharding jdbc + mybatis +spring boot的分庫分表實(shí)現(xiàn)

1.我們先建立數(shù)據(jù)庫和表(分別建了兩個(gè)庫兩張表):

CREATE DATABASE `user_0` /*!40100 DEFAULT CHARACTER SET utf8 */;

CREATE TABLE `user_info_1` (
  `user_id` bigint(19) NOT NULL,
  `user_name` varchar(45) DEFAULT NULL,
  `account` varchar(45) NOT NULL,
  `password` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `user_info_0` (
  `user_id` bigint(19) NOT NULL,
  `user_name` varchar(45) DEFAULT NULL,
  `account` varchar(45) NOT NULL,
  `password` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE DATABASE `user_1` /*!40100 DEFAULT CHARACTER SET utf8 */;

CREATE TABLE `user_info_1` (
  `user_id` bigint(19) NOT NULL,
  `user_name` varchar(45) DEFAULT NULL,
  `account` varchar(45) NOT NULL,
  `password` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `user_info_0` (
  `user_id` bigint(19) NOT NULL,
  `user_name` varchar(45) DEFAULT NULL,
  `account` varchar(45) NOT NULL,
  `password` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.開始我們項(xiàng)目的建立,首先明確一點(diǎn)的,我們添加配置的順序要有先后,思路要清晰,不然在你出錯(cuò)的時(shí)候,你都不知道朝哪個(gè)方向去思考,我們是spring boot+mybatis+sharding jdbc,我們首先是一個(gè)spring boot的項(xiàng)目,所以我們首先建立一個(gè)spring boot項(xiàng)目,你可以從https://start.spring.io這個(gè)網(wǎng)址去創(chuàng)建一個(gè)spring boot項(xiàng)目
這個(gè)時(shí)候,你可以測(cè)試一下,你的spring boot項(xiàng)目能否正常啟動(dòng),可以,你就進(jìn)入到下一步的配置當(dāng)中。
3.mybatis的配置
首先,看看我的源碼的目錄結(jié)構(gòu):

image

4.sharding jdbc的配置
當(dāng)你mybatis調(diào)整好了的時(shí)候,這個(gè)時(shí)候就該加sharding jdbc的配置了,接下如果出問題,應(yīng)該先朝sharding jdbc的方向去考慮.
從目錄結(jié)構(gòu)中我們可以看到,我有一個(gè)config包,我把我的配置都寫在這里面的,首先,我們先實(shí)現(xiàn)我們的分庫分表的策略
分庫策略的類,DemoDatabaseShardingAlgorithm


image.png

使用io.shardingjdbc,就應(yīng)該實(shí)現(xiàn)PreciseShardingAlgorithm接口,然后實(shí)現(xiàn)doSharding方法,對(duì)應(yīng)SQL中的=, IN,還有RangeShardingAlgorithm接口中,對(duì)應(yīng)SQL中的BETWEEN AND,因?yàn)槲抑恍枰?,in操作,所以只實(shí)現(xiàn)了PreciseShardingAlgorithm接口,你如果都需要,你可以都實(shí)現(xiàn)。

分表策略的類,DemoTableShardingAlgorithm


image.png

剩下的就是最重要的部分,sharding jdbc的配置:
DataSourceConfig:

image.png

image.png

image.png

當(dāng)你遇到一個(gè)問題:意思差不多是,需要一個(gè)數(shù)據(jù)源,但是發(fā)現(xiàn)好幾個(gè),你可以在
getShardingDataSource()這個(gè)方法上添加注解:@Primary,設(shè)置默認(rèn)數(shù)據(jù)源
還有一個(gè)重中之重的部分,在Applicatian這個(gè)啟動(dòng)類中:加上注解
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
@EnableTransactionManagement(proxyTargetClass = true)
主要是為了防止代碼的自動(dòng)配置


image.png

5.測(cè)試
我寫了一個(gè)測(cè)試服務(wù)和一個(gè)測(cè)試類
測(cè)試服務(wù):DemoService


image.png

測(cè)試類DemoApplicationTests


image.png

源碼地址:
https://github.com/TheWays/sharding-jdbc

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容