<ul id="ouw02"></ul>
  • 手機版 | 網站導航
    觀察家網 > 專題 >

    每日聚焦:springboot~mybatis-plus的DynamicTableNameInnerInterceptor實現分表

    博客園 | 2023-05-24 15:06:54


    【資料圖】

    超輕量級

    DynamicTableNameInnerInterceptor是mybatis-plug的一個攔截器插件,可以自己定義需要攔截的表單,然后對它進行加工,這時mybatis-plus就會把SQL代碼的表名加上你的這個裝飾。

    封裝的思想

    我們通常把mybatis做成一個包,公司其它同事直接使用咱們的包,包里會統一定義數據基類數據分頁數據脫敏、審計字段填充等特性,開發人員不需要關注這些內容,這些內容會被自己注冊;或者人開發人員可以直接繼承它們,直接使用即可。

    • 插件注冊器
    @Configurationpublic class MybatisPlusConfig implements ApplicationContextAware {ApplicationContext applicationContext;/** * 攔截器 */@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 分頁插件, 對于單一數據庫類型來說,都建議配置該值,避免每次分頁都去抓取數據庫類型interceptor.addInnerInterceptor(new LindPaginationInnerInterceptor());// 防止全表更新與刪除interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());// 加載個性化的分表配置,它可能是用戶在當前項目定義的,然后我們統一對它們進行裝配Optional.ofNullable(applicationContext.getBeanNamesForType(DynamicTableNameInnerInterceptor.class)).ifPresent(o -> {for (String beanName : o) {DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = applicationContext.getBean(beanName, DynamicTableNameInnerInterceptor.class);interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);}});return interceptor;}.....}

    通過上面的代碼我們知道,在外部定義的DynamicTableNameInnerInterceptor對象,會被自動的注冊到mybatis-plus的組件中,開發人員在具體項目里不需要再次注冊。

    • 開發人員在項目中定義一個t_log表,按時間進行分表
    @Beanpublic DynamicTableNameInnerInterceptor tableNamePlusInterceptor() {DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();HashMap map = new HashMap();map.put("t_log", new DaysTableNameParser());dynamicTableNameInnerInterceptor.setTableNameHandlerMap(map);return dynamicTableNameInnerInterceptor;}

    代碼的測試

    @Test(expected = BadSqlGrammarException.class)public void insertLog() {TLog log = new TLog();log.setMessage("測試");logDao.insert(log);}

    生成的sql代碼如下

    [main] DEBUG com.lind.mybatis.dao.LogDao.insert - ==>  Preparing: INSERT INTO t_log_20230524 ( id, message, create_by, create_time, update_by, update_time, del_flag ) VALUES ( ?, ?, ?, ?, ?, ?, ? )

    需要注意的是,無論是sharding-jdbc還是mybatis-plus-DynamicTableNameInnerInterceptor組成的分表,咱們都需要提前把數據表建立出來,他們這些組件是不會自動建表的。

    標簽:

    • 標簽:中國觀察家網,商業門戶網站,新聞,專題,財經,新媒體,焦點,排行,教育,熱點,行業,消費,互聯網,科技,國際,文化,時事,社會,國內,健康,產業資訊,房產,體育。

    相關推薦

    亚洲成a人片在线播放| 亚洲1区1区3区4区产品乱码芒果 | 亚洲精品tv久久久久久久久| 校园亚洲春色另类小说合集| 亚洲国产激情在线一区| 亚洲精品一卡2卡3卡三卡四卡| 亚洲va在线va天堂va不卡下载 | 色婷婷亚洲十月十月色天| 亚洲午夜久久久久妓女影院| 日韩亚洲人成网站| 亚洲AV综合色区无码一二三区| 亚洲xxxx视频| 久久丫精品国产亚洲av不卡| 久久亚洲一区二区| 亚洲日本一区二区三区| 亚洲一区影音先锋色资源| 激情内射亚洲一区二区三区| 国产亚洲精品观看91在线| 伊人亚洲综合青草青草久热| 午夜亚洲WWW湿好爽| 亚洲欧美日韩综合久久久| 亚洲国产精品免费视频| 自拍偷自拍亚洲精品被多人伦好爽| heyzo亚洲精品日韩| 亚洲hairy多毛pics大全| 亚洲色一区二区三区四区| 亚洲看片无码在线视频| 亚洲人成激情在线播放| 亚洲人成网站18禁止久久影院 | 亚洲啪啪免费视频| 亚洲综合偷自成人网第页色| 日韩亚洲不卡在线视频中文字幕在线观看 | 亚洲日韩一页精品发布| 亚洲欧洲日产国码无码网站| 久久久青草青青亚洲国产免观| 国产V亚洲V天堂A无码| 亚洲av网址在线观看| 久久噜噜噜久久亚洲va久| 亚洲码国产精品高潮在线| 亚洲精品二区国产综合野狼| 国产亚洲精AA在线观看SEE|