sharding jdbc + mybatis +spring boot的分庫分表實現

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的配置
首先,看看我的源碼的目錄結構:

image

4.sharding jdbc的配置
當你mybatis調整好了的時候,這個時候就該加sharding jdbc的配置了,接下如果出問題,應該先朝sharding jdbc的方向去考慮.
從目錄結構中我們可以看到,我有一個config包,我把我的配置都寫在這里面的,首先,我們先實現我們的分庫分表的策略
分庫策略的類,DemoDatabaseShardingAlgorithm


image.png

使用io.shardingjdbc,就應該實現PreciseShardingAlgorithm接口,然后實現doSharding方法,對應SQL中的=, IN,還有RangeShardingAlgorithm接口中,對應SQL中的BETWEEN AND,因為我只需要=,in操作,所以只實現了PreciseShardingAlgorithm接口,你如果都需要,你可以都實現。

分表策略的類,DemoTableShardingAlgorithm


image.png

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

image.png

image.png

image.png

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


image.png

5.測試
我寫了一個測試服務和一個測試類
測試服務:DemoService


image.png

測試類DemoApplicationTests


image.png

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容