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):
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

使用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

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



當(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)配置

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

測(cè)試類DemoApplicationTests
