1.我們先建立數據庫和表(分別建了兩個庫兩張表):
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.開始我們項目的建立,首先明確一點的,我們添加配置的順序要有先后,思路要清晰,不然在你出錯的時候,你都不知道朝哪個方向去思考,我們是spring boot+mybatis+sharding jdbc,我們首先是一個spring boot的項目,所以我們首先建立一個spring boot項目,你可以從https://start.spring.io這個網址去創建一個spring boot項目
這個時候,你可以測試一下,你的spring boot項目能否正常啟動,可以,你就進入到下一步的配置當中。
3.mybatis的配置
首先,看看我的源碼的目錄結構:
4.sharding jdbc的配置
當你mybatis調整好了的時候,這個時候就該加sharding jdbc的配置了,接下如果出問題,應該先朝sharding jdbc的方向去考慮.
從目錄結構中我們可以看到,我有一個config包,我把我的配置都寫在這里面的,首先,我們先實現我們的分庫分表的策略
分庫策略的類,DemoDatabaseShardingAlgorithm
使用io.shardingjdbc,就應該實現PreciseShardingAlgorithm接口,然后實現doSharding方法,對應SQL中的=, IN,還有RangeShardingAlgorithm接口中,對應SQL中的BETWEEN AND,因為我只需要=,in操作,所以只實現了PreciseShardingAlgorithm接口,你如果都需要,你可以都實現。
分表策略的類,DemoTableShardingAlgorithm
剩下的就是最重要的部分,sharding jdbc的配置:
DataSourceConfig:
當你遇到一個問題:意思差不多是,需要一個數據源,但是發現好幾個,你可以在
getShardingDataSource()這個方法上添加注解:@Primary,設置默認數據源
還有一個重中之重的部分,在Applicatian這個啟動類中:加上注解
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
@EnableTransactionManagement(proxyTargetClass = true)
主要是為了防止代碼的自動配置
5.測試
我寫了一個測試服務和一個測試類
測試服務:DemoService
測試類DemoApplicationTests