大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 MyBatis分庫分表實現

MyBatis分庫分表實現

更新時間:2022-06-16 09:48:58 來源:動力節點 瀏覽2033次

MyBatis分庫分表如何實現?動力節點小編來告訴大家。

首先實現org.apache.ibatis.plugin.Interceptor接口,復寫以下三個方法:

實現攔截邏輯的地方,內部要通過invocation.proceed()顯式地推進責任鏈前進,也就是調用下一個攔截器攔截目標方法。

Object intercept(Invocation invocation) throws Throwable;

用當前這個攔截器生成對目標target的代理,實際是通過Plugin.wrap(target,this)來完成的,把目標target和攔截器this傳給了包裝函數。

Object plugin(Object target);

設置額外的參數,參數配置在攔截器的Properties節點里。

void setProperties(Properties properties);

如果想要攔截所有的sql,在實現類上添加 annotation

@Intercepts({@Signature(type = StatementHandler.class, method = "prepare",
args = {Connection.class})})

注:Mybatis支持對Executor、StatementHandler、PameterHandler和ResultSetHandler進行攔截,也就是說會對這4種對象進行代理。

框架如上,具體實現有兩個重要點:

1.表的拆分規則

可以在Mapper對象中加上一個annotation,按以下方式去獲取:

String className = id.substring(0, id.lastIndexOf("."));
Class classObj = Class.forName(className);
//根據配置自動生成分表SQL
TableSeg tableSeg = classObj.getAnnotation(TableSeg.class);
TableSeg對象定義:
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface TableSeg {
/**
* 表名
* @return
*/
public String tableName();
/**
* 分表方式,取模,如%5:表示取5余數,
* 如果不設置,直接根據shardBy值分表
* @return
*/
public String shardType();
/**
* 根據什么字段分表
* 多個字段用數學表達表示,如a+b a-b
* @return
*/
public String shardBy();
}

2.sql解析與替換

可以通過以下方法去獲取BoundSql,這個對象有關于這個sql的內容

StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
BoundSql boundSql = statementHandler.getBoundSql();

目前看到一些常規做法都是利用string 的replace方案替換sql中的表名,這顯然一個埋坑的做法。利用詞法分析器才是完美方案,可以使用antlr4,grammar文件可以去github上找到。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 欧美日韩在线播放一区二区三区 | 久久一级黄色片 | 国产精品第 | 精品欧美一区二区三区在线观看 | 黄色影院7755| 亚色在线播放 | 99re6在线视频免费精品 | 高清国产一区二区三区 | 亚洲国产精品久久卡一 | 天天躁日日躁狠狠躁综合 | 国产专区在线播放 | 高清欧美一区二区三区 | 欧美成人精品一级高清片 | 黄色一级网 | 日韩一区二区三区在线观看 | 日日射夜夜操 | 福利姬在线播放 | 免费看欧美一级特黄a大片一 | 日韩伦理一区 | 中文字幕国产 | 激情网站视频 | 天天躁夜夜躁很很躁麻豆 | 在线观看视频一区 | 一区欧美| 久久久综合九色合综国产 | 久久精品久久精品久久 | 5g天天爽影院 | 亚洲一区二区三区免费观看 | 四虎影视4hutv最新地址在线 | 亚洲精品色一区二区三区 | 日本中文字幕在线播放 | 久热这里只精品热在线观看 | 欧美娇小www| 91国内在线国内在线播放 | 久久久91精品国产一区二区三区 | 日韩麻豆国产精品欧美 | 成人在免费观看视频国产 | 97综合久久 | 亚洲欧洲免费 | 校园春色男人天堂 | 久久综合中文字幕一区二区三区 |